2017-01-25 51 views
-2

私のメソッドsignInを呼び出すときに問題が発生しました。これは私のfragment3にあります。私は活動からそれを呼び出そうとしています。ここで私の活動に自分のコードを呼び出そうとしています。この行にあるとき、私はヌルポインタを取得します。fragmentTransaction.add(R.id.loginfragment、fragment);私はあなたに私のコードの残りの部分についてたくさんの情報を与えてくれませんでしたが、他のものが必要な場合は私に知らせてください。私はこれらの輸入品を使用しています。どんな助言も素晴らしいだろう!前もって感謝します。アクティビティからフラグメント内のメソッドを呼び出す方法nullを取得する

import android.support.v4.app.Fragment; 

import android.support.v4.app.FragmentManager; 

import android.support.v4.app.FragmentTransaction; 

      Fragment3 fragment = (Fragment3) getSupportFragmentManager().findFragmentById(R.id.loginfragment); 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
      getSupportFragmentManager().executePendingTransactions(); 
      fragmentTransaction.add(R.id.loginfragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 

      fragment.signIn(); 

答えて

1

EventBusのようなライブラリを使用してコードをリンクすることができます。

uは例えばを実行するイベントを実装するクラスを定義します。LogOutEvent.java

public static class LogOutEvent { /* Additional fields if needed */ } 

Uは、以下のコマンドを

EventBus.getDefault().post(new LogOutEvent()); 

と中を使用してActivity.javaからログアウトなどのイベントを投稿することができますフラグメントイベントバスを最初に登録する必要があります

@Override 
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
} 

、その後断片にあなたはこの

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(LogOutEvent event) {/* Do operation here */}; 

などのイベントを更新に加入することができますacitviyから このような何かを行います。

ExampleFragmentフラグメント=(ExampleFragment)getFragmentManager()。findFragmentById(R.id.example_fragment); フラグメント。();

+0

提案していただきありがとうございますが、私は既に持っているものを修正する方法を期待していました。 –

+0

最後に更新をご覧ください – Vicky

+0

試してみました。同じエラー。 java.lang.NullPointerException:nullオブジェクトリファレンスで仮想メソッド 'void com.BarTabs.fragment.Fragment3.signIn()'を呼び出そうとしています –

2

現在のところ、どのフラグメントが動作しているのか分からないので、Fragment3が実行されていないと仮定します。

最初のものfindFragmentById(R.id.container)はフラグメントコンテナIDをとり、フラグメントコンテナで実行されている現在のフラグメントを取得します。

フラグメントを追加してsignIn関数を実行するには、以下のコードを試してください。ここで

Fragment3 fragment = new Fragment3(); getSupportFragmentManager().beginTransaction.replace(R.id.container,fragment).commit(); fragment.signIn(); idはfragment_container IDとないフラグメントIDであることを確認してください。

関連する問題