无法替换标签viewpager中的片段

时间:2014-02-05 04:52:10

标签: android android-fragments

我在视图寻呼机活动中有3个制表符片段。我们将它命名为F1,F2,F3。

我想点击F2中的项目后更新F1。

这是我到目前为止所尝试的内容。在活动中:

public class UserShopActivity extends FragmentActivity implements
        ActionBar.TabListener,
        UserCategoriesFragment.OnUserCategoriesSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       setContentView(R.layout.activity_user_profile);

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsUserShopAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
...

}

...

    @Override
    public void onUserCategoriesSelected(String category_id, Boolean flag) {
        UserItemsFragment fragment = new UserItemsFragment();
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.pager, fragment)
                .addToBackStack(null)
                .commit();
    }
...

}

activity_user_profile.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</android.support.v4.view.ViewPager>

我的标签页面适配器是一个基本的,TabUserShopAdapter

public class TabsUserShopAdapter extends FragmentStatePagerAdapter {
    static final int NUM_ITEMS = 3;

    public TabsUserShopAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
            case 0:
                // F1
                return new UserItemsFragment();
            case 1:
                // F2
                return new UserCategoriesFragment();
            case 2:
                // F3
                return new UserProfileFragment();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return NUM_ITEMS;
    }



    @Override
    public int getItemPosition(Object object) {
        //return super.getItemPosition(object);
        return POSITION_NONE;
    }
}

但是,在活动中调用F1的监听器不起作用。如何更换片段以从F2更新F1,同时保持标签可见?

我不确定活动中replace的哪个ID。有人可以在这里指出错误。


更新

我在活动中为视图页面添加了setCurrentItem。它确实有效,但它只将标签从F2更改为F1。没有捆绑包中提供的信息。

@Override
public void onUserCategoriesSelected(String category_id) {
    UserItemsFragment fragment = new UserItemsFragment(viewPager);
    Bundle args = new Bundle();
    args.putString("category_id", category_id);
    fragment.setArguments(args);


    viewPager.setCurrentItem(0);
}

如何将此值传递给F1(UserItemsFragment)并在获取值时更新F1?覆盖F1生命周期中的任何方法都有效吗?

请记住,F1预装了数据。因此,在用户点击F2中的项目后,F1将刷新新数据。

1 个答案:

答案 0 :(得分:1)

一个并不简单......替换寻呼机中的片段:)

getSupportFragmentManager().beginTransaction()
            .replace(R.id.pager, fragment)
            .addToBackStack(null)
            .commit();

这将替换您手动添加的片段(通过使用片段管理器的代码)

您的片段由寻呼机添加。 您可以通过在片段上调用.getItem(int position)来轻松访问它们。