How to create dynamic tabs and add different functionality to each fragment in Android?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 13:38:50

You can do like this.

public class TabActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
// Fragment List
private final List<Fragment> mFragmentList = new ArrayList<>();
// Title List
private final List<String> mFragmentTitleList = new ArrayList<>();
private ViewPagerAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab);

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

    viewPager = (ViewPager) findViewById(R.id.container);
    initTitle();

    // edited , you can use multiple titles and one Fragment
    for (int i = 0; i < mFragmentTitleList.size(); i++) {
        mFragmentList.add(new OneFragment());
    }

    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    // Tab ViewPager setting
    viewPager.setOffscreenPageLimit(mFragmentList.size());
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabsFromPagerAdapter(adapter);
}

/**
 * load title data ,it muest below ViewPagerAdapter initialize
 */
private void initTitle() {
    String response = "{\n" +
            "    \"status\": 200,\n" +
            "    \"message\": \"Purchase order updated successfully\",\n" +
            "    \"data\": {\n" +
            "        \"page_title\": \"Home | Welcome\",\n" +
            "        \"menu\": [\n" +
            "            {\n" +
            "                \"cat_id\": \"1\",\n" +
            "                \"cat_name\": \"मुख्य समाचार\",\n" +
            "                \"description\": \"\"             \n" +
            "            },\n" +
            "            {\n" +
            "                \"cat_id\": \"2\",\n" +
            "                \"cat_name\": \"राजनीती \",\n" +
            "                \"description\": \"\"\n" +
            "            }";

    try {
        JSONObject jsonObject = new JSONObject(response);
        int status = jsonObject.getInt("status");
        if (status == 200) {
            JSONObject data = jsonObject.getJSONObject("data");
            JSONArray menu = data.getJSONArray("menu");
            for (int i = 0; i < menu.length(); i++) {
                String cat_name = menu.getJSONObject(i).getString("cat_name");
                mFragmentTitleList.add(cat_name);
            }
        } else {
            for (int i = 0; i < mFragmentList.size(); i++) {
                mFragmentTitleList.add("no title");
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

private void setupViewPager(ViewPager viewPager) {

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), mFragmentList, mFragmentTitleList);

    viewPager.setAdapter(adapter);
}

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

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titleLists) {
        super(fm);
        this.mFragmentList = fragments;
        this.mFragmentTitleList = titleLists;
    }

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

    @Override
    public int getCount() {
        return mFragmentList == null ? 0 : mFragmentList.size();
    }

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

Hope to help you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!