繁体   English   中英

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

[英]How to change ABS tab from button click without using TabHost?

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

我已经使用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??????

        }
    });
}

尝试这种方式最好的方法应该使用

第一步:像这样在TabThree类中创建接口

// 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();

    }
});

第四步:使用您的代码并从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();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM