Iはまた、直面した同じproblem.Myアプリケーションには3つのタブを有し、各タブは次および前のタブに移動するボタンを有します。 タブを有効または無効にする方法が見つかりません。
以前に選択したタブ位置とブール値を保持するために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を使用していました。 CustomViewPagerクラスは次のとおりです。MainActivityのOnCreateのメソッド内
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;
}
}
。最後にDataSetter.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);
};
};
}
:
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;
}
}
もっとあなたが見つけることができます:MainActivity.javaから
以下
viewPager = (CustomViewPager) findViewById(R.id.pager);
viewPager.setPagingEnabled(false);
残っているコード:Javaは、この2行を追加しますhttp://suhas1989.wordpress.com/2014/10/13/enable-or-disable-actionbar-tab-in-android/
はい、わかります!ありがとう。私は変更するタブを変更「することができます」と、TabListenerのチェックを追加することによって、奇妙な振る舞いを追加し、そうでない場合は、私はあなたの問題を回避するには、その単純ではありません@DaniloBertelli最新のタブ= P – DaniloBertelli
を再選択するために、マネージャーをしました。選択したタブを適切に更新するために、「最新のタブを再選択してください」というビューは、ビューの1つのポストを介してキューに入れられたRunnableに存在する必要があります。あなたが本当に理由を知りたいのであれば、そのメソッドの[child.setSelected](http://is.gd/OCa2tF)の呼び出しの後に、tab.select呼び出しが必要になるので、ScrollingTabContainerView#TabClickListener.onClickを参照してください。 – Daniel
@ダニエルこの入力ボックスには、感謝の意を表すのに十分な文字がありません。基本的に私はすでに 'Activity'でさまざまな非同期タスクに' Handler'を使用しています。 'setAelectedNavigationItem()'を新しい '' Runnable''として '' postAtFrontOfQueue() ''で単純に入れます。ブリリアント! – foxx1337