0

ViewPager とアクションバー タブを使用しています。4 つのタブを追加してから配列に入力し、常に 3 つのタブが表示されるため、開始時にそのうちの 1 つを削除します。「質問」タブをクリックすると、「ホーム」タブはアレイ「ログイン」からタブを削除および追加します。そして「質問」が最初の位置に移動しますこれですべて問題ありませんが、「ログイン」タブをクリックすると何も起こらず、「質問」をクリックすると「ログイン」タブに接続されたフラグメントに移動します。前もって感謝します。

public class MainActivity extends SherlockFragmentActivity{

public static ActionBar actionbar;
static Context thisContext;
public static MyAdapter mAdapter;
public static ViewPager mPager;
public static String user_id = "";
Boolean doubleBackToExitPressedOnce = false;
public static ArrayList<Tab> motor_tabs = new ArrayList<ActionBar.Tab>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // construct the tabhost

    setContentView(R.layout.activity_main);
    thisContext = this;

    // setup action bar for tabs
    actionbar = getSupportActionBar();
    //  actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  --> Doing this after adding the tabs now for checking
    // actionbar.setDisplayShowTitleEnabled(false);

    }


    // code for enabling scrolling
    mAdapter = new MyAdapter(getSupportFragmentManager());
    mAdapter.setActionBar(actionbar);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    //mPager.setOffscreenPageLimit(3);


    Tab tab1 = actionbar
                .newTab()
                .setText("Home")
                .setTabListener(
                        (com.actionbarsherlock.app.ActionBar.TabListener) new TabListener<android.support.v4.app.Fragment>(
                                this, 0 + "", mPager));
        motor_tabs.add(tab1);
        actionbar.addTab(tab1);

        Tab tab2 = actionbar
                .newTab()
                .setText("Ask")
                .setTabListener(
                        (com.actionbarsherlock.app.ActionBar.TabListener) new TabListener<android.support.v4.app.Fragment>(
                                this, 1 + "", mPager));
        motor_tabs.add(tab2);
        actionbar.addTab(tab2);

        Tab tab3 = actionbar
                .newTab()
                .setText("Login")
                .setTabListener(
                        (com.actionbarsherlock.app.ActionBar.TabListener) new TabListener<android.support.v4.app.Fragment>(
                                this, 2 + "", mPager));
        motor_tabs.add(tab3);
        actionbar.addTab(tab3);

        Tab tab4 = actionbar
                .newTab()
                .setText("About")
                .setTabListener(
                        (com.actionbarsherlock.app.ActionBar.TabListener) new TabListener<android.support.v4.app.Fragment>(
                                this, 3 + "", mPager));
        motor_tabs.add(tab4);
        actionbar.addTab(tab4);
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        //actionbar.removeTabAt(2);
        //actionbar.getTabAt(3).setTag(2);
        MainActivity.actionbar.removeTabAt(2);
        mPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                Log.d("ViewPager", "onPageSelected: " + arg0);
                if (arg0 == 1 && actionbar.getTabAt(1).getText().equals("AskRoz")){
                    MainActivity.actionbar.removeTabAt(0);
                    MainActivity.actionbar.addTab(MainActivity.motor_tabs.get(2), 1);

                    Globals.ismotorSports = false;
                    mPager.setAdapter(mAdapter);
                    mAdapter.notifyDataSetChanged();
                    mPager.setCurrentItem(0);
                }
                actionbar.getTabAt(arg0).select();
            }

        });
}

private void enableEmbeddedTabs(Object actionBar) {
    try {
        Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
        setHasEmbeddedTabsMethod.setAccessible(true);
        setHasEmbeddedTabsMethod.invoke(actionBar, true);
    } catch (Exception e) {
        Log.e("enableEmbeddedTabsException", "Error marking actionbar embedded", e);
    }
}


public static class MyAdapter extends FragmentStatePagerAdapter {
    ActionBar mActionBar;

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

    @Override
    public int getCount() {
        return MainActivity.actionbar.getTabCount();
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {

        switch (position) {
        case 0:
            if(Globals.ismotorSports){
                MotorSearchActivity motorsearch = new MotorSearchActivity();
                return motorsearch;
            }
            else{
                SearchActivity search = new SearchActivity();
                return search;
            }

        case 1:
            if(Globals.ismotorSports){
                SearchActivity search = new SearchActivity();
                return search;
            }
            else{
                LoginFragment login = LoginFragment.newInstance(false);
                //LoginFragment login = new LoginFragment();
                return login;
            }

        case 2:
            AboutActivity about = new AboutActivity();
            return about;
        }

        return null;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
    public void setActionBar(ActionBar bar) {
        mActionBar = bar;
    }
}
}
4

1 に答える 1