[英]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.