在viewpagers之间共享数据

时间:2016-07-11 13:20:23

标签: android android-viewpager fragmentstatepageradapter

我在我的活动中创建了两个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非常相似。

由于

3 个答案:

答案 0 :(得分:0)

为什么不使用一个ViewPager,片段中包含TextViewEditTextEditText的可见性设置为" 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