【问题标题】:How to disable/enable the ActionBar.TabListener on some condition如何在某些情况下禁用/启用 ActionBar.TabListener
【发布时间】:2016-04-07 08:55:10
【问题描述】:

我已经用 viewpager 实现了 ActionBar.TabListener。现在我想在某些条件下禁用标签点击 我已停止使用 TouchListner 滑动,但希望对 Tab Click 执行相同操作。 这是我的代码。

MainActivity.java

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    ActionBar actionBar;
    ViewPager viewPager;
    String check ="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = (ViewPager) findViewById(R.id.pager);

        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(new MyAdpter(fragmentManager));
        viewPager.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                // TODO Auto-generated method stub

                if ("".equals(check)) {
                    return true;
                }
                return false;
            }
        });
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
       actionBar =  getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


        ActionBar.Tab tab1 = actionBar.newTab();
        tab1.setText("Tab 1");
        tab1.setTabListener(this);

        ActionBar.Tab tab2 = actionBar.newTab();
        tab2.setText("Tab 2");
        tab2.setTabListener(this);

        ActionBar.Tab tab3 = actionBar.newTab();
        tab3.setText("Tab 3");
        tab3.setTabListener(this);

        actionBar.addTab(tab1);
        actionBar.addTab(tab2);
        actionBar.addTab(tab3);

        viewPager.setCurrentItem(2, false);
    }


    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }
}

MyAdpter.java

class MyAdpter extends FragmentPagerAdapter{

    public MyAdpter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        if(position==0){
            fragment = new FragmentA();
        }
        if(position==1){
            fragment = new FragmentB();
        }
        if(position==2){
            fragment = new FragmentC();
        }
        return fragment;
    }

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

FragmentA.java

public class FragmentA extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_a , container,false);
    }
}

FragmentB/FragmentC 与 FragmentA 类似

activity_main.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</android.support.v4.view.ViewPager>

屏幕截图

【问题讨论】:

  • 在哪些情况下您完全喜欢禁用触摸监听器?
  • 由于您使用标签编号管理所有内容是不可能的,因此解决方法是在您要禁用的标签将被点击时在其他标签上执行点击
  • 如何禁用选项卡上的监听器?
  • 你可以做一些解决方法,比如当用户点击选项卡 2 时它被禁用然后只需将他重定向到启用的选项卡,如果你能给我一个场景,那么我将能够向你解释更多清楚地。您不能简单地禁用特定事件的侦听器
  • 有一个名为“check”的变量不能为空。如果为空,则 Tab1 和 Tab2 不可点击...默认情况下,Tab 3 将处于活动状态

标签: android android-fragments android-actionbar


【解决方案1】:

你可以做这样的事情..

在复选框的 OnCheckedChanged 监听器中,您可以指定启用哪些选项卡..

只要做就可以了

// to enable
tabLayout.getChildAt(position).setEnabled(true);

// or to disable
tabLayout.getChildAt(position).setClickable(false);.

使用此属性来启用或禁用标签上的点击。

【讨论】:

  • 这里的“tabLayout”是什么?
  • 看,无论你在 actionbar 中使用什么,基本上都会添加到 tablayout,它的 android 设计小部件。对于该小部件,您可以使用此方法。对于您的情况,您可以将 tablayout 与 viewpager 一起使用,并将您的目的保存为操作栏选项卡不支持这种启用禁用的方法。您可以开始使用这个 guides.codepath.com/android/… 它太容易使用了。跨度>
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2012-07-07
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多