我需要将唯一的ID / Text设置为片段

时间:2018-02-27 12:57:33

标签: android

我用动态标签创建了一个Android应用程序。用户可以随时创建标签。

我需要实现的是,在创建片段时,应为每个新创建的片段分配唯一的 ID / text

当我在Fragment和片段visible之间切换时,我需要从当前可见的片段中获取片段id / text。

我使用viewpagerTabLayout创建了标签。我发现在使用Fragment Transaction创建时添加标记的一些建议,但在这种情况下不起作用。

我的ViewPager类:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private final ArrayList<Fragment> mFragmentList = new ArrayList<>();
    private final ArrayList<String> mFragmentTitleList = new ArrayList<>();
    Context context;
    ViewPager viewPager;
    TabLayout tabLayout;
    int selectedTabPosition;
    PreferenceHelper prefs;
    private Map<Integer, String> mFragmentTags;
    private FragmentManager mFragmentManager;
    private boolean doNotifyDataSetChangedOnce = false;
    public ViewPagerAdapter(FragmentManager manager, Context context, ViewPager viewPager,
                            TabLayout tabLayout) {
        super(manager);
        this.context = context;
        this.viewPager = viewPager;
        this.tabLayout = tabLayout;
        mFragmentTags = new HashMap<Integer, String>();
        prefs = new PreferenceHelper(context);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        if (doNotifyDataSetChangedOnce) {
            doNotifyDataSetChangedOnce = false;
            notifyDataSetChanged();
        }
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    public void removeFrag(int position) {
        removeTab(position);
        Fragment fragment = mFragmentList.get(position);
        mFragmentList.remove(fragment);
        mFragmentTitleList.remove(position);
        //destroyFragmentView(viewPager, position, fragment);
        notifyDataSetChanged();
        Log.e("getCount()", String.valueOf(getCount()));
        if (getCount() > 0)
            tabLayout.setupWithViewPager(viewPager);
        setupTabLayout();
    }

    public View getTabView(final int position) {
        View view = LayoutInflater.from(context).inflate(R.layout.custom_tab_item, null);
        TextView tabItemName = (TextView) view.findViewById(R.id.textViewTabItemName);
        ImageView tabItemAvatar =
            (ImageView) view.findViewById(R.id.imageViewTabItemAvatar);
        ImageButton remove = (ImageButton) view.findViewById(R.id.imageButtonRemove);
        if(getCount() == 1){
            remove.setVisibility(View.INVISIBLE);
        }
        else{
            remove.setVisibility(View.VISIBLE);
        }
        remove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    Log.d("Remove", "Remove");
                    if(getCount() != 1){
                        removeFrag(position);
                    }
                    else{
                       // Toast.makeText("Atleast One Tab is requied")
                    }

            }
        });
        tabItemName.setText(mFragmentTitleList.get(position));
        tabItemName.setTextColor(context.getResources().getColor(android.R.color.background_light));
        tabItemAvatar.setImageResource(R.drawable.boy);
        return view;
    }
    public void setupTabLayout() {
        selectedTabPosition = viewPager.getCurrentItem();
       // Toast.makeText(context, "selectedTabPosition --> "+selectedTabPosition, Toast.LENGTH_SHORT).show();
        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            tabLayout.getTabAt(i).setCustomView(getTabView(i));
        }
    }

    public void removeTab(int position) {
        if (tabLayout.getChildCount() > 0 && tabLayout!=null) {
            tabLayout.removeTabAt(position);
            prefs.remove("POS"+position);

        }

    }
    /*@Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        if (mCurrentFragment != object) {
            mCurrentFragment = (Fragment) object;
        }
        super.setPrimaryItem(container, position, object);
    }*/

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Object object = super.instantiateItem(container, position);
        if (object instanceof Fragment) {
            Fragment fragment = (Fragment) object;
            String tag = fragment.getTag();
            mFragmentTags.put(position, tag);
        }
        return object;
    }

    public Fragment getFragment(int position) {
        Fragment fragment = null;
        String tag = mFragmentTags.get(position);
        if (tag != null) {
            fragment = mFragmentManager.findFragmentByTag(tag);
        }
        return fragment;
    }

    @Override
    public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

请建议我一个解决方案。我对这个片段和标签很新。

0 个答案:

没有答案