将主要活动的意图发送到两个片段

时间:2016-09-26 08:44:20

标签: android android-fragments

我有2 Fragment,我必须向Fragment发送一些ID。我用这个:

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正在运行,但第二个未发送。无法向EditOption发送值?

如何解决?

3 个答案:

答案 0 :(得分:1)

像这样,你可以做到

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

答案 1 :(得分:1)

非常不寻常的是,您尝试将一些数据同时传递给两个Fragment。如果你能在你的问题中简要地写下你在那里的情况,那就太好了。

无论如何,@ Prera​​kora提出了一个解决方案,用于保存您希望在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变量,并且可以从代码中的任何位置访问它。

希望有所帮助!

答案 2 :(得分:0)

昨天我做了同样的事情以及它是如何运作的,我会给你一个想法。

它已经回答了,但我想分享我的经历。这种方式很完美。

首先在您的活动中创建两个界面

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

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

现在来到你的活动,然后像这样打电话给你想要发送数据到fragment.I只是给你举个例子。你可以按照自己的意愿制作它。

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

如何以片段形式获取数据

第一个片段,

 public class Fragment1 extends Fragment implements YourActivity.TaskListener1 {

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

}

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


}


@Override
public void onResultAvailable(String result) {

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

第二个片段,

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

谢谢希望这会对某人有所帮助。