我在我的活动中创建了两个ViewPagers,我尝试做的是在它们之间共享相同的数据。
ViewPager 1显示名为" A"的列表中每个字符串的片段。 每个片段都有一个带TextView的简单布局。
ViewPager 2显示来自同一列表" A"的每个字符串的片段。 每个片段都有一个带有EditText的简单布局。
我试图获得这种行为:
1)VP 1可见,用户可以在列表中轻扫每个填充了字符串的片段" A"。
2)VP 2不可见。
3)在TextView上的onClick事件之后,我想要隐藏VP 1并使用相同的字符串内容显示VP 2,但是在EditText而不是TextView中。
4)用户可以修改EditText的内容。
5)4)用户可以按工具栏中的按钮,然后返回VP 1并更新内容。
我正在使用FragmentStatePagerAdapter。
我想将数据直接保存在数据库或文件中。
是否可以创建类似的东西? 如何在点击片段" n"之后实现事件。在VP1到达片段" n"在VP2? 如何在VP 2中修改后更新VP 1中的内容?
目前的代码非常简单,所以我没有在这里发布,顺便说法与this one非常相似。
由于
答案 0 :(得分:0)
为什么不使用一个ViewPager
,片段中包含TextView
和EditText
。 EditText
的可见性设置为" GONE"。点击TextView
即可将其设置为" GONE"和EditText
" VISIBLE"。单击工具栏按钮时,请执行相反操作,并将新文本填充到相应的TextView
。
答案 1 :(得分:0)
面向对象的方法是使用接口。您可以在活动中创建一个接口,以便片段与之通信。
ViewPagerComm.class:
public interface ViewPagerComm {
String getData();
void setData(String data);
}
的活动:
public class FragmentStatePagerSupport extends Activity, implements ViewPagerComm {
String data;
...
@Override
public void setData(String data){
this.data = data;
}
@Override
public String getData(){
return data;
}
}
...
}
在适配器中:
public static class MyAdapter extends FragmentStatePagerAdapter {
ViewPagerComm callback;
public MyAdapter(FragmentManager fm, ViewPagerComm callback) {
this.callback = callback;
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position, callback);
}
}
在你的碎片中:
public static class ArrayListFragment extends ListFragment {
ViewPagerComm callback;
static ArrayListFragment newInstance(int num, ViewPagerComm callback) {
ArrayListFragment f = new ArrayListFragment();
f.callback = callback;
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
}
现在,只要片段调用setData(aString),父活动就会保存数据。每当片段调用getData()时,都将从活动中检索数据。
答案 2 :(得分:0)
只需在您的活动(您的Viewpager活动)中声明变量
public class TestActivity extends AppCompatActivity {
public String test;
}
并在你的片段(代码内)中访问它
((TestActivity)getActivity()).test