使用ViewPager的选项卡 - 如何获取实例而不是新对象?

时间:2014-03-28 10:04:32

标签: android android-fragments android-viewpager

我使用的是标准Android tabs,我需要从父活动中访问我的标签。

我在MainActivity中执行以下操作来获取标签:

myTab = ((FirstTabFragment)mAdapter.getItem(index));

问题是我总是得到一个新对象而不是实例,因为getItem的实现方式如下:

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int index) {

    switch (index) {
        case 0:
            // Status fragment activity
            return new FirstTabFragment();
        case 1:
            // Mission fragment activity
            return new SecondTabFragment();
        case 2:
            // Team fragment activity
            return new ThirdTabFragment();
    }

    return null;
}
...

我搜索了很多内容,但我仍然无法找到任何有效的解决方案来获取Fragments的实例。

我需要实例,因为我需要更改片段的视图,因此我需要它的变量。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

最好的方法是使用方法FragmentManagerfindFragmentById findFragmentByTag。当然,您需要为FragmentPagerAdapter创建的每个片段声明ID或TAG。如果我没记错的话,默认实现使用类名作为标记。

答案 1 :(得分:0)

将片段保存在SparseArrayHashMap中。在getItem方法中添加数组中的片段也会覆盖onFragmentDestroy方法。在方法中,从SparseArrayHashMap中删除该项目。现在创建一个像这样的getter方法

  public Fragment getFragment(int pos) {
               return array.get(pos);

}