簡體   English   中英

啟用/禁用Android ActionBar.Tab

[英]Enable/Disable Android ActionBar.Tab

我正在開發使用新的Tabs系統(ActionBar.addTab())的應用程序,我將有3個選項卡。 在確定的過程中,我想鎖定(禁用)它們中的兩個(不刪除,僅不接受點擊並且不更改“選擇器”。

我無法更改內容(通過實現TabListener而不更改片段等),但是選擇器發生了變化。

無論如何,僅禁用/啟用選項卡? 無需刪除並再次添加?

提前致謝! BR,達尼洛

抱歉,操作欄中的選項卡沒有“啟用”或“禁用”功能。 如您所見,您可以刪除並重新添加它們-這是您可以獲得AFAIK的最接近的。

我遇到了完全相同的問題。 終於能夠解決它。 如前所述,無法禁用/啟用選項卡。 只有一種方法-使用以下方法返回上一個選項卡

getActionBar().setSelectedNavigationItem(tab);

但是請注意,這應該被從內完成

onTabSelected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction)

方法,因為這樣會陷入遞歸循環。 因此,在onTabSelected()中-將消息發送到活動處理程序以執行setSelectedNavigation()。

這里有一個問題(您將在實現時知道):在setSelectedNavigation中傳遞什么“ tab”值。 為此,我們必須跟蹤是否是用戶按下的選項卡開關或通過代碼強制切換到最后一個選項卡。

為了這:

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    if (forcedTabSwitch)
        forcedTabSwitch = false;
    else 
        mTabToBeSwitchedTo = tab.getPosition();
}

在處理程序中

switch (msg.what) {
            case SWITCH_TO_TAB :
                forcedTabSwitch = true;
                            break;
}

我也遇到了同樣的問題。我的應用程序有三個選項卡,每個選項卡都有按鈕可移至下一個和上一個選項卡。 我找不到用於啟用或禁用標簽頁的任何方法。

我使用DataSetter類來保存先前選擇的選項卡位置和布爾值以確定選項卡的選擇。 如果布爾標志為true,則用戶按下了下一個/上一個按鈕。 否則,用戶將嘗試按我們不允許的選項卡來選擇選項卡。
我使用處理程序來選擇選項卡。當用戶單擊下一步按鈕時,在片段內部廣播了該請求。 廣播請求具有整數參數,該整數參數是我們要設置的下一個或上一個選項卡的位置。 片段內的代碼是:

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
    {
      View rootView = inflater.inflate(R.layout.first_tab_fragment, container, false); 
      next = (Button)rootView.findViewById(R.id.nextbutton);
      next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent intent = new Intent("TAB_CLICKED");
            Bundle bundle = new Bundle();
            bundle.putInt(MainActivity.POSITION,1);
            intent.putExtras(bundle);
            getActivity().sendBroadcast(intent);
        }
     });
    return rootView;
    }

我使用CustomViewPager而不是ViewPager來防止選項卡滑動。 CustomViewPager類為:

            public class CustomViewPager extends ViewPager {            

            private boolean enabled;            
            public CustomViewPager(Context context) {
                super(context);
            }

            public CustomViewPager(Context context, AttributeSet attrs) {
                super(context, attrs);
            }

            @Override
            public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                if (this.enabled) {
                    return super.onTouchEvent(event);
                }

                return false;
            }

            @Override
            public boolean onInterceptTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                 if (this.enabled) {
                        return super.onInterceptTouchEvent(event);
                    }

                    return false;
            }

            public void setPagingEnabled(boolean enabled) {
                this.enabled = enabled;
            }             
        }

在MainActivity.java的oncreate方法內,添加以下兩行:

     viewPager = (CustomViewPager) findViewById(R.id.pager);
     viewPager.setPagingEnabled(false);

以下是MainActivity.java的其余代碼:

  @Override
  public void onTabSelected(Tab tab, FragmentTransaction ft) {

    Log.d("MainActivity","onTabSelected");  
    if(setter.getFlag() == true)
    {
        viewPager.setCurrentItem(setter.getposition());
    }           
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    Log.d("MainActivity","onTabUnselected");    
    //handler.sendEmptyMessage(0);
    Message message = new Message();
    message.arg1 = setter.getposition();
    handler.sendMessage(message);       
}

Handler handler = new Handler()
{
    public void handleMessage(android.os.Message msg)
    {
        int arg1 = msg.arg1;            
        Log.d("arg1",arg1+"");
        //viewPager.setCurrentItem(arg1);
        mActionBar.setSelectedNavigationItem(arg1);
        Log.d("handler","Inside handler");
    }
};

BroadcastReceiver receiver =  new BroadcastReceiver(){

    public void onReceive(Context context, android.content.Intent intent) {

        String action = intent.getAction();
        Bundle bundle = intent.getExtras();
        int position = bundle.getInt(MainActivity.POSITION);
        Log.d("Action",action);
        Log.d("position",position+"");
        setter.setposition(position);
        setter.setflag(true);
        Message message = new Message();
        message.arg1 = position;
        handler.sendMessage(message);
    };
   };
 }

最后是DataSetter.java:

    public class DataSetter 
    {
        int position;
        boolean flag;   
        void setposition(int value)
        {
            position = value;
        }   
        void setflag(boolean value)
        {
            flag = value;
        }   
        int getposition()
        {
            return position;
        }   
        boolean getFlag()
        {
            return flag;
        }
    }

您可以在以下網址找到更多信息: http : //suhas1989.wordpress.com/2014/10/13/enable-or-disable-actionbar-tab-in-android/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM