如何从活动转到片段方法

时间:2015-03-12 16:18:47

标签: android android-fragments fragmentpageradapter

我有四个班级:

  1. FragmentActivity
  2. FragmentPagerAdapter
  3. FragmentA
  4. FragmentB
  5. 在FragmentActivity中,我将TabPagerAdapter(FragmentPagerAdapter)设置为ViewPager。

    viewPager = (ViewPager)findViewById(R.id.pager);
    tabAdapter = new TabPagerAdapter(this, viewPager);
    viewPager.setAdapter(tabAbAdapter);
    

    在TabPagerAdapter中,我从switch语句返回getItem()中的两个片段

    return new fragmentA();
    return new fragmentB();
    

    Fragment A通过接口方法搜索并将变量传递给FragmentActivity。

    public void onDataPass(String data) {
        kks= data;
        viewPager.setCurrentItem(1);
    }
    

    所有这一切都很好。我从FragmentA的列表中获取数据,然后将其传递回MainActivity。 setCurrentItem(1)显示片段B。

    我坚持的部分是如何在onDataPass中的kks = data和viewPager.SetCurrentItem()之间运行FragmentB.upDateEquipment(kks)。

    我可以从Fragment B获取kks的值,并通过从Fragment B中的按钮实现setOnClickItemListener来运行upDateEquipment,这样可行,但我不想为用户添加额外的点击。

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

Fragment fr = ((ActionBarActivity) activity)
                            .getSupportFragmentManager().findFragmentByTag(
                                    "add_product");

                    if (fr instanceof Sellers_Add_Product_Fragment) {

                        ((Sellers_Add_Product_Fragment) fr).yourMethod();
                    }

答案 1 :(得分:0)

我建议从寻呼机适配器获取片段。

class MyPagerAdapter extends FragmentPagerAdapter {
    private FragmentA mFragmentA = new FragmentA();
    private FragmentA mFragmentB = new FragmentB();
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return mFragmentA;
            case 1:
                return mFragmentB;
        }
    }

    public ReflashStatusFragment getFragmentA() {
        return mFragmentA;
    }

    public RemoteFlashFragment getFragmentB() {
        return mFragmentB;
    }

然后使用类似mPagerAdapter.getFragmentB.updateEquipment(kks);

的内容

答案 2 :(得分:0)

早期的反应都可能有效。但我想从onDataPass方法添加更新FragmentB。我遇到的问题是获取FragmentB的实例以调用updateEquipment方法。我没有在findFragmentByTag调用中获得正确的id。这是我最终开始工作的方式。

onDataPass(String data) {
    kks = data;
    String name - tabAdapter.makeFragmentName(viewPager.getId(), 1);
    FragmentB fragmentB = FragmentB)getSupportFragmentManager().findFragmentByTag(name);
    fragmentB.updateEquipment(kks);
}