如何在 viewpager 适配器中初始化它们时将标签添加到我的片段

How to add tags to my fragments during initialising them inside a view pager adapter

这是我的代码; Addviewer、dataviewer 和 settingviewer 是我的片段 class。我想在初始化期间给每个方法一个标记,以便我可以在另一个片段或 mainactivity 中使用它们。

import java.util.ArrayList;
import java.util.HashMap;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;

public class viewPagerAdapter extends FragmentPagerAdapter {
    ArrayList<Fragment> arf;

    public viewPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
        arf = new ArrayList<Fragment>();
        arf.add(new DataViewer());
        arf.add(new AddViewer());
        arf.add(new SettingsViewer());
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return arf.get(arg0);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return arf.size();
    }
}

使用 PagerAdapter 的 instantiateItem(...) 和 destroyItem(...) 方法来跟踪片段的 creation/destruction。或者你总是可以在构建过程中对你的 Fragment 进行 setArguments(Bundle b) 。例如

    private SparseArray<Fragment> registeredFragments = new SparseArray<>();

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);  
        //TODO check if it's the type you want, and set the tag
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
        registeredFragments.remove(position);
    }