Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:膨胀类片段时出错_Java_Android_Xml_Listview_Android Fragments - Fatal编程技术网

Java 错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:膨胀类片段时出错

Java 错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:膨胀类片段时出错,java,android,xml,listview,android-fragments,Java,Android,Xml,Listview,Android Fragments,我正在尝试创建一个游戏,在这个游戏中,你可以与连接到一个房间的一群人聊天。我想在片段中进行聊天,我希望它在横向模式下位于UI(实际游戏活动)的右侧。我在片段布局和EditText中使用ListView。我看到了各种各样的答案,但找不到解决办法。 我正在使用firebase实时数据库在listview中插入数据。 感谢您的帮助 主要游戏活动: package com.example.lrmah.rajaranichorpolice; import android.support.v7.app.A

我正在尝试创建一个游戏,在这个游戏中,你可以与连接到一个房间的一群人聊天。我想在片段中进行聊天,我希望它在横向模式下位于UI(实际游戏活动)的右侧。我在片段布局和EditText中使用ListView。我看到了各种各样的答案,但找不到解决办法。 我正在使用firebase实时数据库在listview中插入数据。 感谢您的帮助

主要游戏活动:

package com.example.lrmah.rajaranichorpolice;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.example.lrmah.rajaranichorpolice.Chat.chatFragmentActivity;

public class mainGameActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_game);

        Bundle bundle=new Bundle();
        bundle.putString("name", "From Activity");
        //set Fragmentclass Arguments
        chatFragmentActivity fragobj=new chatFragmentActivity();
        fragobj.setArguments(bundle);
    }
}
聊天室碎片活动:

package com.example.lrmah.rajaranichorpolice.Chat;

import android.app.Fragment;
import android.app.ListFragment;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.ProgressBar;

import com.example.lrmah.rajaranichorpolice.R;
import com.example.lrmah.rajaranichorpolice.playerClass;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.example.lrmah.rajaranichorpolice.playerClass;

import java.util.ArrayList;
import java.util.List;


public class chatFragmentActivity extends Fragment {

    public static final String ANONYMOUS = "anonymous";
    public static final int DEFAULT_MSG_LENGTH_LIMIT = 1000;

    private ListView mMessageListView;
    private MessageAdapter mMessageAdapter;
    private ProgressBar mProgressBar;
    private ImageButton mPhotoPickerButton;
    private EditText mMessageEditText;
    private Button mSendButton;

    private String mUsername;

    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference mMessagesDatabaseReference;
    private ChildEventListener mChildEventListener;
    private DatabaseReference mMessagesRoomDatabaseReference;
    List<playerClass> playerClassList = new ArrayList<>();
    String roomCode;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        getActivity().setRequestedOrientation(
                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        initViews();
        return inflater.inflate(R.layout.chat_fragment_layout,container,false);




        //accesing database


    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    public void getDatabaseReferences()
    {
        mFirebaseDatabase= FirebaseDatabase.getInstance();
        mMessagesDatabaseReference = mFirebaseDatabase.getReference().child("messages");
        mMessagesRoomDatabaseReference=mMessagesDatabaseReference.child(roomCode);
    }

    public void textChangedMethod()
    {
        mMessageEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (charSequence.toString().trim().length() > 0) {
                    mSendButton.setEnabled(true);
                } else {
                    mSendButton.setEnabled(false);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });
        mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
    }
    public void childEventListenerMethod()
    {
        mChildEventListener= new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                playerClass playerClassOBJ= dataSnapshot.getValue(playerClass.class);
                mMessageAdapter.add(playerClassOBJ);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        mMessagesDatabaseReference.addChildEventListener(mChildEventListener);
    }
    public void initListView()
    {
        mMessageAdapter = new MessageAdapter(getActivity(), R.layout.item_message, playerClassList);
        mMessageListView = (ListView) getActivity().findViewById(R.id.messageListView);
        mMessageListView.setAdapter(mMessageAdapter);
    }

    public void onClickingSend()
    {
        // Send button sends a message and clears the EditText
        mSendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // TODO: Send messages on click
                playerClass playerClassOBJ = new playerClass(null, mUsername, mMessageEditText.getText().toString(),null,null);
                //push the message to database in the node "messages"
                mMessagesRoomDatabaseReference.push().setValue(playerClassOBJ);
                // Clear input box
                mMessageEditText.setText("");
            }
        });

    }

    public void getRoomCode()
    {
        //passing value from activity
        roomCode=getArguments().getString("name");
    }


    public void  initViews()
    {

        mProgressBar = (ProgressBar) getView().findViewById(R.id.progressBar);
        mPhotoPickerButton = (ImageButton) getView().findViewById(R.id.photoPickerButton);
        mMessageEditText = (EditText) getView().findViewById(R.id.messageEditText);
        mSendButton = (Button) getView().findViewById(R.id.sendButton);

        // Initialize progress bar
        mProgressBar.setVisibility(ProgressBar.INVISIBLE);
    }
}

您应该首先对布局进行
充气
以获得片段的视图,然后尝试在
onCreateView
中访问视图
initViews()

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    final View view = inflater.inflate(R.layout.chat_fragment_layout, container, false);
    initViews(view);
    return view;
}
因此,请尝试将其修改为:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.chat_fragment_layout, container, false);
    initViews();
    getActivity().setRequestedOrientation(
            ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    return rootView;
}

chatFragmentActivity
中,在
onCreateView
方法完成之前,您不能调用
initViews()
,因为
getView()
将返回
null
。您可以重写
onCreateView
方法,并将视图传递给
initViews
类似的内容:

public void initViews(final View view) {
    mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    mPhotoPickerButton = (ImageButton) view.findViewById(R.id.photoPickerButton);
    mMessageEditText = (EditText) view.findViewById(R.id.messageEditText);
    mSendButton = (Button) view.findViewById(R.id.sendButton);
    mProgressBar.setVisibility(ProgressBar.INVISIBLE);
}
然后将视图传递到
onCreateView
中的
initViews

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    final View view = inflater.inflate(R.layout.chat_fragment_layout, container, false);
    initViews(view);
    return view;
}

根据我的说法,你可以尝试用其他方法来膨胀你的碎片,比如:

在主活动布局中为片段添加容器。你可以简单地用这个替换

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<Button
    android:layout_width="50dp"
    android:layout_height="50dp" />
</RelativeLayout>
而且你还面临着列表id的问题,你可以参考这个


希望这会有所帮助。

那么可能是因为
rootView
getView()方法中不可用,直到
onCreateView
返回。我建议尝试上面的@MarkusPenguin解决方案谢谢您的快速响应。容器属于哪个类?(在container=(FrameLayout)findViewById(R.id.container)中;此onCreate()方法属于代码中作为mainGameActivity的main活动。我按照您的建议执行了操作,并收到一条错误消息:“java.lang.RuntimeException:内容具有id属性为'android.R.id.list'的视图,它不是ListView类”我在我的回答的最后一行提到了这个错误的解决方案“而且你还面临列表id的问题,你可以参考这个链接”检查链接……我用fragment only扩展了我的片段,而不是ListFragment,你可以根据你的要求选择。谢谢你Raghav Sharma。它很有魅力。我把它改为fragment only,然后初始化了我的列表,解决了这个问题。谢谢你的快速响应。我已经完成了你说的,我正在准备g同样的错误。
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    final View view = inflater.inflate(R.layout.chat_fragment_layout, container, false);
    initViews(view);
    return view;
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<Button
    android:layout_width="50dp"
    android:layout_height="50dp" />
</RelativeLayout>
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    container = (FrameLayout) findViewById(R.id.container);
    //set Fragment to activity
    BlankFragment frag = new BlankFragment();
   getFragmentManager().beginTransaction().add(R.id.container,frag).commit();
}