2017-06-20 13 views
0

私は3つのフラグメントを持っています。フラグメントA、B、C。「続ける」ボタンがあり、Bに進む。「進む」ボタンをクリックすると、Cに進むことができる。「追加」ボタンがあり、Bに戻る。続行ボタンが押されたときにAからBへデータを送信したい。追加ボタンが押されたときにはCからBに変更されます。バンドルを使ってみました。 AからBへ行くときに初めてnullポインタ例外を与えているので、Cからのバンドルはnullです。これを解決するには?どんな助けも高く評価されます。以下のコードスニペットをご覧ください3つのフラグメント間の通信

注:ItemDetailsはフラグメントAから取得され、EmployeeDetailsはフラグメントCから取得されます。フラグメントフロー=> 1.フラグメントA 2. AからB(アイテムリストはBに渡されます)3. BからC(通信なし)4. CからBに戻る(Bに渡された従業員リスト)。

String TEMP_STRING_EMPLOYEES, TEMP_STRING_ITEMS; 
EmployeeList employeeList; 
ItemsList itemsList; 

@Override 
public void onStart() { 
    super.onStart(); 
    Bundle args = getArguments(); 
    if (args != null) { 

     TEMP_STRING_ITEMS = args.getString("ItemsDetails"); 

     try { 
      // Set article based on argument passed in 
      TEMP_STRING_EMPLOYEES = args.getString("EmployeeDetails"); 

     } catch (NullPointerException ex) { 

     } 


    } else { 

    } 

} 
//Next lines of code from MAinActivity.java 

@Override ます。public void onFragmentInteractionForEmployeeDetails(ArrayListのArrayListを){

EmployeeList employeeList = new EmployeeList(arrayList); 
    String correspondingJson = NavigationUtils.getStringForObject(employeeList); 

    B newFragment = new B(); 
    Bundle args = new Bundle(); 
    args.putString("EmployeeDetails", correspondingJson); 
    newFragment.setArguments(args); 

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

    // Replace whatever is in the fragment_container view with this fragment, 
    // and add the transaction to the back stack so the user can navigate back 
    transaction.replace(R.id.fragment_container, newFragment); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 
+0

[this](https://stackoverflow.com/a/44008851/6950238)を見てください –

+0

あなたはあなたのバンドルコードを送ったり、送ったりすることができますか? –

+0

フラグメント間の通信には、[アクティビティを介して回覧する](https://developer.android.com/training/basics/fragments/communicating.html)または[この回答](https://stackoverflow.com/)に従うことができます。 a/36496481/1276636) – Sufian

答えて

0

あなたは断片でコールバックを使用することができますし、活動があなたのオブジェクトを格納します。

活動

public class MyActivity extends Activity implements MyActivityCallback{ 

    private Object myObject; // Replace with your object type 

    @Override 
    public Object getMyObject(){ 
     return myObject; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     myObject = new Object(); 
     // ... 
    } 

    // .... 
} 

あなたの神父で次にフラグメント

public interface MyActivityCallback{ 
    Object getMyObject(); 
} 

MyActivityCallback

private MyActivityCallback mCallback; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    try { 
     mCallback = (MyActivityCallback) getActivity(); 
    } catch (ClassCastException e) { 
     throw new ClassCastException(context.toString() 
       + " must implement " + MyActivityCallback.class.getSimpleName()); 
    } 
} 

@Override 
public void onDetach() { 
    mCallback = null; 
    super.onDetach(); 
} 

あなたのオブジェクトにアクセスするにはmCallback.getMyObject();

+0

申し訳ありませんが、これは私の質問に答えていません。私は3つの断片を持っていて、取り除きたいのはNullPointerExceptionです。問題は実行の流れにあります。フラグメントAの最初の値が来る。この時点では、Cからの値はヌルです。私はコードを掲載します。どうかチェックしてください –

+0

オブジェクトを束に入れて次の断片に送る問題は、実装可能で維持する苦痛であるParcelableである必要があるということです。アクティビティを使用してデータ(または外部データマネージャ)を格納する方が簡単です。しかし、私はあなたのポストを更新するときにあなたのコードを見ています。 :) – Eselfar

+0

が更新されました。 Stringデータのみを渡しているとします。 –

関連する問題