简体   繁体   English

android-在ViewPager中使用相同的片段类

[英]android - Using same fragment class in ViewPager

I have a ViewPager that I want to use same Fragment in the each page with different variables. 我有一个ViewPager ,我想在每个页面中使用具有不同变量的相同Fragment But when I do this, only one page of ViewPager is viewing and other pages are blank. 但是,当我这样做时,只有ViewPager的一页正在查看,其他页面为空白。 How can i do this? 我怎样才能做到这一点? I can't create different layout for each tab because I want to add them dynamically. 我无法为每个选项卡创建不同的布局,因为我想动态添加它们。

ViewPagerAdapter: ViewPagerAdapter:

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

class FragmentStoreTabPageAdapter extends FragmentPagerAdapter {
    String[] pageTitles = {"Y","Z","X"};
    public FragmentStoreTabPageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return FragmentStorePages.newInstance(pageTitles[position],position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return pageTitles[position];
    }
}

Main Fragment that contains the ViewPager: 包含ViewPager的主要片段:

public class FragmentStore extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_store,container,false);
        ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager_store);
        viewPager.setAdapter(new FragmentStoreTabPageAdapter(getChildFragmentManager()));
        TabPageIndicator tpi = (TabPageIndicator) view.findViewById(R.id.indicator_store);
        tpi.setViewPager(viewPager);
        return view;
    }

}

The Fragment that uses in ViewPager: 在ViewPager中使用的片段:

public class FragmentStorePages extends Fragment implements ReplaceListener {
    String categoryName;
    int categoryId;
    public static FragmentStorePages newInstance(String categoryName, int categoryId){
        FragmentStorePages fsp = new FragmentStorePages();
        Bundle args = new Bundle();
        args.putString("categoryName", categoryName);
        args.putInt("categoryId", categoryId);
        fsp.setArguments(args);
        return fsp;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_store_pages,container,false);
        Bundle args = getArguments();
        categoryName = args.getString("categoryName");
        categoryId = args.getInt("categoryId");
        getFragmentManager().beginTransaction().replace(R.id.fragment_store_pages,FragmentStoreSubCategories.newInstance(categoryName),"SubCategoryFragment").commit();
        return view;
    }

    @Override
    public void onReplace(Bundle args) {

    }
}

Use This PagerAdapter 使用此PagerAdapter

class FragmentStoreTabPageAdapter extends FragmentPagerAdapter {
    String[] pageTitles = {"Y","Z","X"};
    public FragmentStoreTabPageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        FragmentStorePages fsp = new FragmentStorePages();
        Bundle args = new Bundle();
        args.putString("categoryName", categoryName);
        args.putInt("categoryId", categoryId);
        fsp.setArguments(args);
        return fsp;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return pageTitles[position];
    }
}

Use This Fragment 使用此Fragment

public class FragmentStorePages extends Fragment implements ReplaceListener {
    String categoryName;
    int categoryId;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_store_pages,container,false);
        Bundle args = getArguments();
        if(args!=null && args.containsString("categoryName")&& args.containsString("categoryId")){
        categoryName = args.getString("categoryName");
        categoryId = args.getInt("categoryId");
        }           
        return view;
    }

    @Override
    public void onReplace(Bundle args) {

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM