I am starting out and this is my first post. Any help will be greatly appreciated!
I have successfully implemented tabs with ABS. I would like to change tabs and reload the fragment activity from a button click in another tab. From searching posts it seems everyone has done this using TabHost. Is there any way to do this without TabHost?
Please see diagram picture of what I would like to do: https://i.stack.imgur.com/jotW6.png
Please see code below of 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();
}
Here is code from the other activity where I would like a button click to load a tab2 for example
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??????
}
});
}
Try this way It is best approach for you should use
First step : Create InterFace in
TabThreeClass Like this.Second Step : Implements in
MainActivityClass Like.Third step : Click your btnAdd Button in
TabThree ClassFourth step: use Your code & change your tab from
TabThree Class& Last main thing Dont forget to Register interface Like
EDIT : in your case Register this way