2017-10-12 5 views
1

Ich versuche ein Spiel zu erstellen, in dem Sie mit einer Gruppe von Leuten chatten können, die mit einem verbunden sind Zimmer. Ich möchte diesen Chat innerhalb des Fragments haben, das ich will, dass es auf der rechten Seite von UI (ACTUAL GAME ACTIVITY) im Querformatmodus ist. Ich benutze ListView innerhalb des Fragment-Layouts und EditText auch. Ich habe verschiedene Antworten gesehen und konnte keine Lösung finden. Ich verwende Firebase Realtime-Datenbank, um Daten in die Listview einzufügen. Jede Hilfe wird geschätzt.Fehler: android.view.InflateException: Binär XML-Datei Zeile # 8: Binär XML-Datei Zeile # 8: Fehler beim Aufblasen von Klassenfragment

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> 

Fehlerprotokoll:

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) 

Antwort

2

Nach mir können Sie versuchen, Ihr Fragment durch andere Methoden wie diese aufzublasen:

Behälter in Haupttätigkeit Layout für Fragment hinzuzufügen. Sie können einfach mit diesem

<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 ersetzen Sie in 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(); 
} 

und auch Sie stehen vor Problem mit der Liste id hinzufügen können Sie diese link

Hoffnung beziehen kann, das wird helfen .

+0

Vielen Dank für die schnelle Antwort. Zu welcher Klasse gehört der Container?(In Container = (FrameLayout) findViewById (R.id.container); – sac

+0

diese onCreate() -Methode gehört zur Haupttätigkeit als mainGameActivity in Ihrem Code –

+0

Es sagt nicht Symbol 'Container' lösen .. – sac

0

Sie sollten zunächst inflate Ihre Layouts Ihr Fragments Ansicht und dann zu erhalten versuchen, Ihre Ansichten zuzugreifen, initViews() in onCreateView.

So versuchen, es zu ändern:

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

Ich habe das getan und es gibt immer noch den gleichen Fehler – sac

+0

Dann ist wahrscheinlich, weil 'rootView' in der' getView() 'Methode nicht verfügbar ist, bis die' onCreateView' zurückgibt. Ich schlage vor, @MarkusPenguin Lösung über – pleft

0

In chatFragmentActivity Sie nicht initViews() vor Ihrer onCreateView Methode beendet nennen kann, weil getView()null zurückkehren wird. Sie können stattdessen Ihre onCreateView Methode umschreiben und die Ansicht zu initViews so etwas passieren:

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

Dann die Ansicht initViews in onCreateView passieren.

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

zu versuchen Danke für die schnelle Antwort Ich habe getan, was Sie sagten, und ich bekomme den gleichen Fehler. – sac

Verwandte Themen