[英]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.