2017-10-12 7 views
1

私はあなたに接続されている人のグループとチャットできるゲームを作成しようとしています。ルーム。このチャットを横向きモードでUI(ACTUAL GAME ACTIVITY)の右側に置いておきたいフラグメント内でチャットしたいと思います。フラグメントレイアウトと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) 

答えて

2

私によると、あなたは、このような他の方法であなたのフラグメントを膨らませるために試みることができます。

は、主な活動のレイアウトにフラグメントのコンテナを追加します。あなたは単にあなたが、これが役立ちます。このlink

希望を参照することができますあなたは)(の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での問題に直面しているコードでは、この

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

に置き換えることができます。

+0

迅速な対応をありがとうございます。コンテナはどのクラスに属していますか?(container =(FrameLayout)findViewById(R.id.container); – sac

+0

このonCreate()メソッドはメインアクティビティにコード内のmainGameActivityとして属します –

+0

シンボル 'container'を解決できません。 – sac

0

あなたが最初にあなたのレイアウトはあなたのフラグメントのビューを取得して、あなたの意見、onCreateViewinitViews()にアクセスしようとする必要がありますinflate

だから、それを修正してみてください。

chatFragmentActivity
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

私はこれを行いましたが、それでも同じエラーが返されます – sac

+0

'onCreateView'が返るまで、' getView() 'メソッドで' rootView'が利用できないためです。私は上記の@MarkusPenguinソリューションを試してみることを提案します – pleft

0

getView()nullを返しますので、あなたのonCreateView方法は、終了する前に、あなたがinitViews()を呼び出すことはできません。あなたは、あなたの代わりに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); 
} 

が続いonCreateViewinitViewsにビューを渡します。

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

私はあなたが言ったことをやりましたが、私は同じエラーが発生しています。 – sac

関連する問題