Я также столкнулся с той же проблемой. В моем приложении есть три вкладки, и на каждой вкладке есть кнопки для перехода на следующую и предыдущую вкладки.Я не нахожу способ включить или отключить вкладку.
Я использовал класс 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 добавьте следующие две строки:
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/