Я также столкнулся с такой же приложение problem.My имеет три вкладки и каждая вкладка имеет кнопки для перемещения на следующую и предыдущую вкладку. Я не могу найти способ включения или отключения вкладок.
Я использовал класс DataSetter для хранения ранее выбранной позиции табуляции и логического значения для определения выбора вкладки. Если флаг boolean имеет значение 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, чтобы предотвратить вкладку Swiping. 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;
}
}
Внутри OnCreate метод 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/
Да, я вижу! Благодарю. У меня есть менеджер, чтобы добавить странное поведение, добавив проверку TabListener, если я «могу» изменить вкладки, которые я меняю, если не переустановить последнюю вкладку = P – DaniloBertelli
@DaniloBertelli. Ваше обходное решение не так просто. Чтобы он обновил выбранную вкладку «Просмотр», ваша «повторная выбор последней вкладки» должна быть в Runnable в очереди через сообщение в одном из представлений. Если вы действительно хотите знать, зачем тогда искать в ScrollingTabContainerView # TabClickListener.onClick - поскольку ваш вызов tab.select должен быть после вызова [child.setSelected] (http://is.gd/OCa2tF) в этом методе. – Daniel
@ Даниэль не хватает символов в этом поле ввода, чтобы выразить свою благодарность. В основном я уже использую 'Handler' для различных задач async в моей' Activity', я просто ставил 'setSelectedNavigationItem()' как новый '' Runnable'' с '' postAtFrontOfQueue() '' там. Brilliant! – foxx1337