我有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
发送值?
如何解决?
答案 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
。如果你能在你的问题中简要地写下你在那里的情况,那就太好了。
无论如何,@ Prerakora提出了一个解决方案,用于保存您希望在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);
}
}
谢谢希望这会对某人有所帮助。