错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:错误膨胀类片段
我正在尝试创建一个游戏,在其中可以与连接到房间。我想在我想要它在横向模式下的UI(实际游戏活动)右侧的片段中进行此聊天。我在片段布局和EditText中使用ListView。我看到了各种答案,找不到解决办法。 我正在使用firebase实时数据库在列表视图中插入数据。 任何帮助表示赞赏。错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:错误膨胀类片段
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:
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:
<?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:
<?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>
错误日志:
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)
据我,你可以尝试用其他方法这样夸大你的片段:
在主活动布局片段添加容器。你可以简单地用这个
<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>
在代码替换,你可以在的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();
}
,你也面临着列表ID的问题,你可以参考这个link
希望这将有助于。
你应该先inflate
你的布局,让您的片段的视图,然后尝试访问您的看法,initViews()
在onCreateView
。
所以尽量将其改为:
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);
}
,那么该观点传递给initViews
在onCreateView
。
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;
}
谢谢你的快速回应,我已经完成了你说的和我得到同样的错误。 – sac
感谢您的快速回复。容器属于哪个类?(在容器中=(FrameLayout)findViewById(R.id.container); – sac
这个onCreate()方法属于你的代码中mainGameActivity的主要活动 –
它说不能解析符号'container'。 – sac