私は始めています、そしてこれは私の最初の投稿です。どんな助けでも大歓迎です!
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??????
}
});
}