简体   繁体   English

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

[英]Error: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment

I am trying to create a game in which you can chat with group of people who are connected to a room. 我正在尝试创建一个游戏,您可以在其中与一组连接到房间的人聊天。 I want to have this chat within the fragment which i want it to be in the right side of UI(ACTUAL GAME ACTIVITY) in landscape mode.I am using ListView inside the fragment layout and EditText also. 我希望在片段中进行此聊天,我希望它在横向模式下位于UI(实际游戏活动)的右侧。我在片段布局和EditText中也使用ListView。 I have seen various answers and couldn't find a solution. 我看到了各种答案,但找不到解决方案。 I am using firebase realtime database to insert data in the listview. 我正在使用firebase实时数据库在listview中插入数据。 Any help is appreciated. 任何帮助表示赞赏。

mainGameActivity: mainGameActivity:

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);
    }
}

chatFragmentActivity: chatFragmentActivity:

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);
    }
}

chat_Fragment_Layout.xml: chat_Fragment_Layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>

    <ListView
        android:id="@+id/messageListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/linearLayout"
        android:stackFromBottom="true"
        android:divider="@android:color/transparent"
        android:transcriptMode="alwaysScroll"
        tools:listitem="@layout/item_message"/>

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/photoPickerButton"
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:background="@android:drawable/ic_menu_gallery" />

        <EditText
            android:id="@+id/messageEditText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1" />

        <Button
            android:id="@+id/sendButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:enabled="false"
            android:text="@string/send_button_label"/>

    </LinearLayout>

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
</RelativeLayout>

activity_main_game.xml: activity_main_game.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
>
    <fragment
    android:name=
                "com.example.lrmah.rajaranichorpolice.Chat.chatFragmentActivity"
        android:id="@+id/chatFragmentId"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentEnd="true"/>

    <Button
    android:layout_width="50dp"
    android:layout_height="50dp" />
</RelativeLayout>

Error log: 错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.lrmah.rajaranichorpolice, PID: 7655
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lrmah.rajaranichorpolice/com.example.lrmah.rajaranichorpolice.mainGameActivity}: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
        at android.app.ActivityThread.-wrap14(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
     Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment
     Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
        at com.example.lrmah.rajaranichorpolice.Chat.chatFragmentActivity.initViews(chatFragmentActivity.java:223)
        at com.example.lrmah.rajaranichorpolice.Chat.chatFragmentActivity.onCreateView(chatFragmentActivity.java:61)
        at android.app.Fragment.performCreateView(Fragment.java:2352)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:959)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1149)
        at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1255)
        at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2315)
        at android.app.FragmentController.onCreateView(FragmentController.java:99)
        at android.app.Activity.onCreateView(Activity.java:6093)
        at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:41)
        at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:67)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:784)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:865)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:525)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:378)
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
        at com.example.lrmah.rajaranichorpolice.mainGameActivity.onCreate(mainGameActivity.java:12)
        at android.app.Activity.performCreate(Activity.java:6955)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
        at android.app.ActivityThread.-wrap14(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

According to me you can try to inflate your fragment by other methods like this: 据我说,您可以尝试通过其他方法来扩充您的片段,如下所示:

add container for fragment in main activity layout. 在主活动布局中为片段添加容器。 you can simply replace with this 你可以简单地用这个代替

<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>

In code you can add in onCreate() 在代码中,您可以添加onCreate()

@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();
}

and also you face problem with list id you can refer this link 并且你也面临列表ID的问题,你可以参考这个链接

Hope this will help. 希望这会有所帮助。

You should first inflate your layouts to get your fragment's view and then try to access your views, initViews() in onCreateView . 您应首先对布局进行inflate以获取片段的视图,然后尝试访问onCreateView视图initViews()

So try modifying it to: 所以尝试将其修改为:

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;
}

In chatFragmentActivity you cannot call initViews() before your onCreateView method has finished, because getView() will return null . chatFragmentActivity ,在onCreateView方法完成之前无法调用initViews() ,因为getView()将返回null You can instead rewrite your onCreateView method and pass the view to initViews something like that: 您可以改写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);
}

Then pass the view to initViews in onCreateView . 然后将视图传递给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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 android.view.InflateException:二进制XML文件第0行:二进制XML文件第0行:膨胀类片段时出错 - android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class fragment android.view.InflateException:二进制XML文件第7行:二进制XML文件第7行:夸大类片段的错误 - android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class fragment Android调试错误android.view.InflateException:二进制XML文件第9行:夸大类片段的错误 - Android debugging error android.view.InflateException: Binary XML file line #9: Error inflating class fragment android.view.InflateException:二进制 XML 文件第 9 行:二进制 XML 文件第 9 行:错误膨胀类 - android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class android.view.InflateException:二进制 XML 文件第 2 行:二进制 XML1 文件第 2 行:错误充气 Z3501BB4F2AC9CDC80<unknown></unknown> - android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown> Android-android.view.InflateException:二进制XML文件第9行:膨胀类片段的错误 - Android - android.view.InflateException: Binary XML file line #9: Error inflating class fragment android.view.InflateException:二进制XML文件第6行:二进制XML文件第6行:膨胀类错误 - android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class android.view.InflateException:二进制XML文件第0行:二进制XML文件第0行:膨胀类错误<Classname> - android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class <Classname> android.view.InflateException:二进制XML文件行#8:错误膨胀类片段 - android.view.InflateException: Binary XML file line #8: Error inflating class fragment android.view.InflateException:二进制XML文件第56行:二进制XML文件第56行:夸大类片段的错误 - android.view.InflateException: Binary XML file line #56: Binary XML file line #56: Error inflating class fragment
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM