从ViewPager中删除片段并在Android中添加新的片段是一个好主意吗?

时间:2015-07-31 14:04:27

标签: android android-fragments android-viewpager

我正在寻找第二意见。我有一个扩展Fragment类的类,包含一个ViewPager和MaterialTabs。我需要找到一个问题的解决方法,我想从ViewPager中删除标签,只添加一个(片段)等等。

enter image description here

例如,我从两个标签开始,在一个操作上,我想要删除这些标签并添加一个新标签,并在另一个操作上重新添加这两个标签。 这是愚蠢的还是有射击?谢谢。

以下是我要上课的课程:

import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;

/**
 *
 */
public class PuzzlesTabActivity extends Fragment implements MaterialTabListener {

    public static int NUM_TABS = 2;
    public static boolean currentlyRunning;
    private MaterialTabHost tabHost;
    private ViewPager pager;
    private PuzzlesTabActivity.ViewPagerAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(layout.puzzle_tab_layout, container, false);

        if (Utils.isNetworkAvailable(this.getActivity())) {
            this.tabHost = (MaterialTabHost) rootView.findViewById(id.myTabHost);
            this.pager = (ViewPager) rootView.findViewById(id.myPager);
            try {
                this.pager.setPadding(0, 5, 0, 0);

                // init view pager
                this.adapter = new PuzzlesTabActivity.ViewPagerAdapter(this.getActivity().getFragmentManager());
                this.pager.setAdapter(this.adapter);
                this.pager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        // when user do a swipe the selected tab change
                        PuzzlesTabActivity.this.tabHost.setSelectedNavigationItem(position);

                    }
                });
                this.pager.setCurrentItem(0);

                // add tabs
                for (int i = 0; i < this.adapter.getCount(); i++) {
                    this.tabHost.addTab(this.tabHost.newTab().setText(this.adapter.getPageTitle(i)).setTabListener(this));
                }
            } catch (Exception e) {
                Log.e(Constants.TAG, e.getMessage());
            }
        } else {
            ActivityCompat.startActivity(this.getActivity(), new Intent(this.getActivity(), MainActivity.class), null);
        }
        return rootView;
    }

    @Override
    public void onTabSelected(MaterialTab tab) {
        this.pager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabReselected(MaterialTab tab) {

    }

    @Override
    public void onTabUnselected(MaterialTab tab) {

    }

    private class ViewPagerAdapter extends FragmentStatePagerAdapter {

        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);

        }

        public Fragment getItem(int num) {
            switch (num) {
                case 0:
                    PuzzlesFragment aFragment = new PuzzlesFragment();
                    return aFragment;
                case 1:
                    FavFragment nFragment = new FavFragment();
                    return nFragment;
                default:
                    return new PuzzlesFragment();
            }
        }

        @Override
        public int getCount() {
            return PuzzlesTabActivity.NUM_TABS;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return PuzzlesTabActivity.this.getResources().getString(string.new_puzzles);
                case 1:
                    return PuzzlesTabActivity.this.getResources().getString(string.fav_puzzles);
                default:
                    return PuzzlesTabActivity.this.getResources().getString(string.new_puzzles);
            }
        }
    }

    public void onPause() {
        super.onPause();
        SharedPreferences prefs = this.getActivity().getSharedPreferences(Utils.PREFS_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("lastActivity", this.getClass().getName());
        editor.commit();
    }

    @Override
    public void onStart() {
        super.onStart();
        PuzzlesTabActivity.currentlyRunning = true;
    }

    @Override
    public void onStop() {
        PuzzlesTabActivity.currentlyRunning = false;
        super.onStop();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }
}

1 个答案:

答案 0 :(得分:1)

是的,这很好。在正常的用例中,ViewPager已经做了类似的事情。它的工作原理是在滑动时创建左侧的片段,当前片段和右侧的片段(因此一次只存在三个)。

至于添加和删除标签,也可以这样做。只需确保在ViewPager中处理新标签片段的交换。