viewpager中的tablayout问题

时间:2016-10-21 12:48:02

标签: android android-fragments tabs android-viewpager android-tablayout

我在每个标签片段中制作动态列表视图的动态标签。问题是,当我在两个连续的选项卡之间切换时,会显示前一个选项卡的xml,但是当我单击非连续选项卡时,它可以正常工作。不知道问题出在哪里,所以我在这里附上我的片段类和HomeActivity`enter代码。

$("#myList").val($("#myList option:first").val());

提前致谢。

1 个答案:

答案 0 :(得分:0)

所以,我把一些模拟数据用于测试,这里有一个工作示例(我修改了你的代码,它仍然需要一些增强但是它有效)。

<强> HomeActivity2.java:

public class HomeActivity2 extends AppCompatActivity   {

    public ViewPagerAdapter adapter;
    private Toolbar toolbar;

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ArrayList<String> mappingOfCategoryWithIndex = new ArrayList<>();
    private ArrayList<MenuItem> allMenuItemsList = new ArrayList<MenuItem>();
    private ArrayList<MenuItemCategory> allMenuItemCategoryList = new ArrayList<MenuItemCategory>();

    //Getters
    public ViewPager getViewPager() {
        return viewPager;
    }
    public ArrayList<String> getMappingOfCategoryWithIndex() {
        return mappingOfCategoryWithIndex;
    }
    public ArrayList<MenuItem> getAllMenuItemsList() {
        return allMenuItemsList;
    }
    public TabLayout getTabLayout() {
        return tabLayout;
    }
    public ArrayList<MenuItemCategory> getAllMenuItemCategoryList() {
        return allMenuItemCategoryList;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_home2);


        findViewById(R.id.tabs).bringToFront();
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        allMenuItemsList = new ArrayList<>();
        allMenuItemsList.add(new MenuItem("Item 1", "Category 1"));
        allMenuItemsList.add(new MenuItem("Item 2", "Category 1"));
        allMenuItemsList.add(new MenuItem("Item 3", "Category 2"));
        allMenuItemsList.add(new MenuItem("Item 4", "Category 3"));
        allMenuItemsList.add(new MenuItem("Item 5", "Category 3"));

        allMenuItemCategoryList = new ArrayList<>();
        allMenuItemCategoryList.add(new MenuItemCategory("Category 1"));
        allMenuItemCategoryList.add(new MenuItemCategory("Category 2"));
        allMenuItemCategoryList.add(new MenuItemCategory("Category 3"));


        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);

        tabLayout.setupWithViewPager(viewPager);
        setupTabIcons();

    }

    private void setupTabIcons() {

        for (int i=0; i<allMenuItemCategoryList.size() ; i++){
            TextView tab = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null);
            tab.setText(allMenuItemCategoryList.get(i).Menu_Item_Category_Name);
            mappingOfCategoryWithIndex.add(i, allMenuItemCategoryList.get(i).Menu_Item_Category_Name) ;
            tabLayout.getTabAt(i).setCustomView(tab);
        }
    }

    private void setupViewPager(ViewPager viewPager) {
        adapter = new ViewPagerAdapter(getSupportFragmentManager());

        for (int i=0 ; i<allMenuItemCategoryList.size() ; i++) {
            String category = allMenuItemCategoryList.get(i).Menu_Item_Category_Name;
            adapter.addFrag(TabCategory.getTabCategoryFragment(category), category);
        }

        viewPager.setAdapter(adapter);

    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

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

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

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

        }

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

<强> TabCategory.java:

public class TabCategory extends Fragment {

    private static final String KEY_CATEGORY = "category";
    private TextView nameOfItem;
    private HomeActivity2 activity;
    private LinearLayout container1;

    public ArrayList<String> mappingOfCategoryWithIndex = new ArrayList<>();

    public ArrayList<MenuItem> allMenuItemsList1 = new ArrayList<MenuItem>();

    private String selectedCategory;

    private ArrayList<MenuItem> menuItemsOfSelectedCategory = new ArrayList<>();

    private View rootView;

    public TabCategory() {

    }

    public static TabCategory getTabCategoryFragment(String selectedCategory) {
        TabCategory tabCategory = new TabCategory();
        Bundle args = new Bundle();
        args.putString(KEY_CATEGORY, selectedCategory);
        tabCategory.setArguments(args);
        return tabCategory;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        selectedCategory = getArguments().getString(KEY_CATEGORY);


        activity = (HomeActivity2) getActivity();

        allMenuItemsList1 = activity.getAllMenuItemsList();

        mappingOfCategoryWithIndex = activity.getMappingOfCategoryWithIndex();


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView = inflater.inflate(R.layout.tab_category, container, false);
        container1 = (LinearLayout) rootView.findViewById(R.id.container1);
        return rootView;

    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        container1.removeAllViews();
        menuItemsOfSelectedCategory.clear();

        for (int i = 0; i < allMenuItemsList1.size(); i++) {
            if (allMenuItemsList1.get(i).getCategoryName().equals(selectedCategory)) {
                menuItemsOfSelectedCategory.add(allMenuItemsList1.get(i));
            }
        }

        for (int i = 0; i < menuItemsOfSelectedCategory.size(); i++) {
            final View addView = layoutInflater.inflate(R.layout.menu_item, null);
            nameOfItem = (TextView) addView.findViewById(R.id.nameofitem);
            nameOfItem.setText(menuItemsOfSelectedCategory.get(i).getName());

            container1.addView(addView);
        }

    }


}