All tabs display the same fragment

I ran into a problem in my android app. When I added two tabs, I also had two snippets. But the fact is that the same fragment appears on both tabs. Another fragment is not displayed. Here is how it looks.

http://i60.tinypic.com/eu0kzs.png

http://i60.tinypic.com/2uh0i1k.png

Here is my code for my activity:

public class DatabaseFiller extends Activity{
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);


    setContentView(R.layout.rmactivity);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setSubtitle("Created by Rohit Nandakumar");

    /*ActionBar.Tab searchdb = actionBar.newTab().setText("Search Database");
    ActionBar.Tab searchlist = actionBar.newTab().setText("Show List"); */

    ActionBar.Tab Frag1 = actionBar.newTab().setText("Search Database");
    ActionBar.Tab Frag2 = actionBar.newTab().setText("Show List");

    Fragment fragment1 = new DatabaseFillerFragment();
    Fragment fragment2 = new DeleteDBItems();

    Frag1.setTabListener(new MyTabListener(fragment1));
    Frag2.setTabListener(new MyTabListener(fragment2));

    actionBar.addTab(Frag1);
    actionBar.addTab(Frag2);

}
}

Here is my entire MyTabListener class:

package com.example.foodsaver2;

import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener; 
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentTransaction;

public class MyTabListener implements TabListener {

public Fragment fragment;

public MyTabListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    if (fragment == null) {
        // If not, instantiate and add it to the activity
        ft.add(android.R.id.content, fragment);
    } else {
        // If it exists, simply attach it in order to show it
        ft.attach(fragment);
    }
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    if (fragment != null) {
        // Detach the fragment, because another one is being attached
        ft.detach(fragment);
    }
}

}

What am I doing wrong here? Any help regarding this issue would be appreciated.

+3
source share
2 answers

Initialize the listener, detach the fragment and fix it.

On the selected tab, simply add the fragment you want to detach.

See the following revised help code -

public MyTabListener(Activity activity, String tag, Class<T> cls, Bundle args) {
                mActivity = activity;
                mTag = tag;
                mClass = cls;
                mArgs = args;

            fragment  = mActivity.getFragmentManager().findFragmentByTag(mTag);
            if (fragment  != null) {
                FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
                ft.detach(fragment);
                ft.commit();
            }
    }


    public void onTabSelected(Tab tab, FragmentTransaction ft) {
                fragment  = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
                ft.add(android.R.id.content, fragment , mTag);
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            if (fragment != null) {
                ft.detach(fragment);
            }
        }
+1
source

FragmentTransaction, .

0

All Articles