如何在不使用TabHost的情况下从按钮单击更改ABS选项卡?

时间:2013-01-13 18:37:54

标签: android android-fragments actionbarsherlock android-tabs

我开始了,这是我的第一篇文章。任何帮助将不胜感激!

我已成功实施了ABS标签。我想更改选项卡并从另一个选项卡中的按钮单击重新加载片段活动。从搜索帖子来看,似乎每个人都使用TabHost完成了这项工作。没有TabHost有没有办法做到这一点?

请参阅我想要做的图表图片:http://i.imgur.com/wwDBj.png

请参阅以下MainActivity代码:

public class MainActivity extends SherlockFragmentActivity {

private int tabSelected = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


            getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


            getSupportActionBar().addTab(
                    getTab(new TabListener<FragmenOne>(this, FragmenOne.class
                            .getName(), FragmenOne.class), "TabOne"));
            getSupportActionBar().addTab(
                    getTab(new TabListener<FragmenTwo>(this, FragmenTwo.class
                            .getName(), FragmenTwo.class), "TabTwo"));
            getSupportActionBar().addTab(
                    getTab(new TabListener<FragmenThree>(this, FragmenThree.class
                            .getName(), FragmenThree.class), "TabThree"));
}

private Tab getTab(TabListener listener, String title) {
    ActionBar.Tab tab = getSupportActionBar().newTab();
    tab.setTabListener(listener);
    tab.setText(title);
    return tab;
}

public class TabListener<T extends Fragment> implements
ActionBar.TabListener {
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;
    private final Bundle mArgs;
    public Fragment mFragment;

    public TabListener(SherlockFragmentActivity activity, String tag,
            Class<T> clz) {
        this(activity, tag, clz, null);
    }

    public TabListener(SherlockFragmentActivity activity, String tag,
            Class<T> clz, Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;

        mFragment = mActivity.getSupportFragmentManager()
                .findFragmentByTag(tag);
        if (mFragment != null && !mFragment.isDetached()) {
            FragmentTransaction ft = mActivity.getSupportFragmentManager()
                    .beginTransaction();
            ft.detach(mFragment);
            ft.commit();
        }


    }

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


                        if(tab.getPosition()==0)
                        {
                            tabSelected = 0;
                            FragmenOne frag = new FragmenOne();
                            ft.replace(android.R.id.content, frag);     
                        }
                        else if(tab.getPosition()==1)
                        {
                            tabSelected = 1;
                            FragmenTwo frag = new FragmenTwo();
                            items = 1;
                            invalidateOptionsMenu();
                            ft.replace(android.R.id.content, frag);
                        }
                        else if(tab.getPosition()==2)
                        {
                            tabSelected = 2;
                            FragmenThree frag = new FragmenThree();
                            ft.replace(android.R.id.content, frag);
                        }


    }


    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
            items = 0;
            invalidateOptionsMenu();
        }

    }

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

    }
}

public void setCurrentItem() {

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    FragmenTwo frag = new FragmenTwo();
    ft.replace(android.R.id.content, frag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();

}

以下是其他活动的代码,我希望按一下按钮来加载tab2,例如

public class TabThree extends Activity  implements OnItemSelectedListener {

// Add button
Button btnAdd;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabthree);

    // add button
    btnAdd = (Button) findViewById(R.id.button);



    btnAdd.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {


        //What to write here??????

        }
    });
}

1 个答案:

答案 0 :(得分:0)

尝试这种方式这是你应该使用

的最佳方法

第一步:TabThree类中创建 InterFace 就像这样。

// The listener we are to notify when a Button is clicked
OnNotifyButtonClickedListener mOnNotifyButtonClickedListener = null;

/**
 * Represents a listener that will be notified of tab selections.
 */
public interface OnNotifyButtonClickedListener {

    public void OnNotifyButtonClicked();
}
/**
 * Sets the listener that should be notified of tab selection events.
 * 
 * @param listener
 *            the listener to notify.
 */
public void setOnNotifyButtonClickedListener(
        OnNotifyButtonClickedListener listener) {
    mOnNotifyButtonClickedListener = listener;
}

第二步:MainActivity类似的实现。

public class MainActivity extends SherlockFragmentActivity
        implements
        TabThree.OnNotifyButtonClickedListener{
}

第三步:点击TabThree Class

中的btnAdd按钮
btnAdd = (Button) findViewById(R.id.button);

btnAdd.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

       mOnNotifyButtonClickedListener.OnNotifyButtonClicked();

    }
});

第四步:使用您的代码&amp;从TabThree Class

更改标签
@Override
    public void OnNotifyButtonClicked() {       

    // Put your tab selection code here.

    }

&安培;最后一件事不要忘记注册界面赞

   FragmenThree mFragment= new FragmenThree();
    mFragment.setOnNotifyButtonClickedListener(this);
在您的情况下

编辑以这种方式注册

   mFragment = mActivity.getSupportFragmentManager()
                .findFragmentByTag(tag);
        if (mFragment != null && !mFragment.isDetached()) {

            mFragment.setOnNotifyButtonClickedListener(this);
            FragmentTransaction ft = mActivity.getSupportFragmentManager()
                    .beginTransaction();
            ft.detach(mFragment);
            ft.commit();
        }