【问题标题】:How to pass data from a fragment to another fragment that´s inside a view pager?如何将数据从片段传递到视图页面中的另一个片段?
【发布时间】:2020-03-02 17:46:33
【问题描述】:

说明:

我有一个活动(父亲活动),里面有一个片段(父亲片段)。这个片段是标签式的,并且有两个片段(片段 A片段 B)随着视图分页器的变化而变化。

父亲活动将数据发送到父亲片段,后者必须将它们带到片段B

问题:

我可以用 父片段 做什么来将数据带到 片段 B(在视图寻呼机内)?

额外:

有人告诉我可以使用interface,我尝试研究它,但找不到任何好的教程/解释。

【问题讨论】:

  • 嗨@Tomas,您可以将viewpager片段实例存储在父片段中,并使用该片段实例调用可以更新数据的子片段中的方法。
  • 您好,感谢您的回答。能详细解释一下吗?
  • @Deepak 实际上会导致生产崩溃,除非您使用stackoverflow.com/questions/54279509/… 获取片段实例

标签: android android-viewpager fragment


【解决方案1】:

嗨@Tomas 我已经这样做了

 private class ViewPagerAdapter extends FragmentPagerAdapter {

    private Fragment fragment1 = Fragment1.getInstance();
    private Fragment fragment2 = Fragmen2.getInstance();

    ViewPagerAdapter(FragmentManager supportFragmentManager) {
        super(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return fragment1;
        } else {
            return fragment2;
        }
    }


    @Override
    public int getCount() {
        return  2 ;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "";
    }

    Fragment1 getFragment1() {
        return (Fragment1) fragment1;
    }

    Fragment2 getFragment2() {
        return (Fragment2) fragment2;
    }
}

这是我的 Fragemnt2 代码:

public class Fragment2 extends Fragment {

private TextView text;
public static Fragment2 getInstance() {
    return new Fragment2();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragmant_2, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
     text = view.findViewById(R.id.text2);

}

public void reloadView(String data){
   text.setText(data);
}



}

并且从 viewpager 适配器我这样调用 faragment 2 的方法

adapter.getFragment1().reloadView("data");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多