2016-09-26 7 views
2

私は2 Fragmentを持っており、FragmentにいくつかのIDを送る必要があります。私はこれを使用します。メインアクティビティから2つのフラグメントにインテントを送信

public void onItemLongClick(View view, int position) { 
    FragmentManager fm = getSupportFragmentManager(); 
    actionOption actionOption = new actionOption(); 
    actionOption.show(fm,"fragment_edit_name"); 
    ToDoModule movie = dbList.get(position); 
    int y= movie.getId(); 
    Bundle args = new Bundle(); 
    args.putInt("exampleInt", y); 
    actionOption.setArguments(args); 

    EditOption editOption = new EditOption(); 

    ToDoModule bl = dbList.get(position); 
    int z= movie.getId(); 
    Bundle zs = new Bundle(); 
    zs.putInt("int", y); 
    editOption.setArguments(zs); 
} 

まずFragmentが働いているが、2番目は送信されません。 EditOptionに値を送信できませんか?

どうすれば解決できますか?このような

+0

インテントを使用して、同時に2つのフラグメントにデータを送信することはできません。データは、その時点で呼び出されたフラグメント(あなたの場合はToDoModule)にのみ送られます。同じデータを複数のフラグメントにアクセスしたい場合は、それを 'SharedPreferences'に保存し、必要に応じてフラグメントからアクセスすることができます。 –

+0

しかし、データは変更されますか? SharedPreferencesでこれを行うことはできますか? –

+0

'SharedPreferences'にデータを保存すると、更新しない限り変更されません。 –

答えて

1

その操作を行うことができます。あなたがあなたの質問に簡単に書いた状況を書くことができれば、素晴らしいことでしょう。

とにかく@Prera​​kSolaは、渡したいデータを保存するための解決策を考え出しました。SharedPreferenceであり、あなたのケースではうまくいくはずです。

ムービーIDをactionOptionに、またeditOptionに渡そうとしています。このようなIDを最初にSharedPreferenceに格納しようとするとよいでしょう。

今すぐあなたのActivity

public void onItemLongClick(View view, int position) { 

    // ... Your code 

    // Save the movie id 
    SharedPreferences pref = getSharedPreferences("MY_APPLICATION", MODE_PRIVATE); 
    pref.edit().putInt("MOVIE_ID", movie.getId()).commit(); 

    // Do not pass any bundle to the Fragment. Just transact the Fragment here 
} 

からあなたFragment年代からonCreateView好みから値を取得します。

SharedPreferences pref = getActivity().getSharedPreferences("MY_APPLICATION", MODE_PRIVATE); 
String movieID = pref.getInt("MOVIE_ID", 0); 

あなたは映画のIDが含まれている場合がありpublic static int変数を持ってしようとする可能性があり、あなたのコードからどこからでもアクセスすることができます別の方法。

希望に役立ちます!

+0

ありがとうございますが、IDを受け取ったとき id = pref.getInt( "id"、0); それはすべて0を取る、どのように私は0を変更することができますか? –

+0

環境設定で値を設定した後にコミットしたかどうかを確認します。正しいIDを取得する必要があります。 'pref.edit()。putString(" MOVIE_ID "、movie.getId())。commit();' –

+0

しかし、movie.getidは整数なので間違っています! –

1

何かが、あなたは、あなたが同時に2つのFragmentにいくつかのデータを渡すためにしようとしていることは非常に珍しいこと

public interface SetData { 
    public void data(String id); 
} 

From your activity class or on item click listner 
SetData setData; 
setData.setDrawerEnabled("anydata"); 

Infragment , YourFragment extends Fragment implements SetData 
0

こんにちは、私は同じことをやって、どのように動作するか、私はあなたにアイデアを与えます。

私はすでに答えていますが、私はexperianceを共有したいと思います。この方法は完璧です。すべての

まず今

public interface TaskListener1 { 
    public void onResultAvailable(String result); 
} 

public interface TaskListener2 { 
    public void onResultAvailable(String result); 
} 

は、あなたの活動に来て、あなただけのあなたを与えるfragment.I'mにデータを送信する場所をこのように呼んで、自分の活動に二つのインターフェースを作成example.Youあなたが望むようにそれを作ることができます。このような

class TestAsyncTask extends AsyncTask<Void, String, Void> { 

    String response_result; 
    public TaskListener1 taskListener1 = null; 
    public TaskListener2 taskListener2 = null; 

    public TestAsyncTask(TaskListener1 taskListener1, TaskListener2 taskListener2) { 
     this.taskListener1 = taskListener1; 
     this.taskListener2 = taskListener2; 

    } 
    @Override 
    protected Void doInBackground(Void... unused) { 

     response_result = "Test data what you want to send"; 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void unused) { 

      taskListener1.onResultAvailable(response_result); 
      taskListener2.onResultAvailable(response_result); 

    } 
} 

コール、

new TestAsyncTask(new Fragment1), new Fragment2)).execute(); 

そして、どのようにフラグメント内のデータを取得するには、

まずフラグメント、

​​

第2のフラグメント、

public class Fragment2 extends Fragment implements YourActivity.TaskListener2 { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.fragment2, container, false); 
    return view; 

} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

} 


@Override 
public void onResultAvailable(String result) { 

    Logs.d("TAG", "Fragment result2:" + result); 
} 
} 

これは誰かを助けることをお祈りしております。

関連する問題