0

私は と 内部に各タブを表す 2 つのフラグメントを持っているアプリを持っていActionBarActivityます...つまり、fragment1 に "teste" と "teste2" の 2 つの値を持つリストがありますが、fragment2(tab2) に変更して戻るとtab1 に再び「teste」、「teste2」、「teste」、「teste2」のようなリストの値を繰り返しますこれを防ぐにはどうすればよいですか?

TabActionBarActivity:

public class TabActionBarActivity extends Activity {

String contextoId;
String BuId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_action_bar);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    String label1 = getResources().getString(R.string.label1);
    Tab tab = actionBar.newTab();
    tab.setText(label1);

    TabListener<Tab1Fragment> tl = new TabListener<Tab1Fragment>(this, label1, Tab1Fragment.class);

   tab.setTabListener(tl);
    actionBar.addTab(tab);


    String label2 = getResources().getString(R.string.label2);
            tab = actionBar.newTab();
            tab.setText(label2);
            TabListener<Tab2Fragment> tl2 = new TabListener<Tab2Fragment>(this, label2, Tab2Fragment.class);
            tab.setTabListener(tl2);
            actionBar.addTab(tab);


            BuId =  getIntent().getExtras().getString("BUId");
            contextoId = getIntent().getExtras().getString("CId");
            Log.i("BUIdTabFrag", BuId);



}


private class TabListener<T extends Fragment> implements
            ActionBar.TabListener {
        private Fragment mFragment;
        private final Activity mActivity;
        private final String mTag;
        private final Class<T> mClass;


        public TabListener(Activity activity, String tag, Class<T> clz) {
                        mActivity = activity;
                        mTag = tag;
                        mClass = clz;
                    }



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

        }




        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
             // Check if the fragment is already initialized
                        if (mFragment == null) {
                            // If not, instantiate and add it to the activity
                            mFragment = Fragment.instantiate(mActivity, mClass.getName());
                            ft.add(android.R.id.content, mFragment, mTag);
                        } else {
                            // If it exists, simply attach it in order to show it
                            ft.attach(mFragment);
                        }


        }




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


        }




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.tab_action_bar, menu);
    return true;
}

あなたが私を助けてくれることを願っています

"編集"

私がこれを行う場合:

ft.replace(android.R.id.content, mFragment, mTag).commit();

それは私にエラーを与えます:

log: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.icenterv2/com.example.admin.TabActionBarActivity}: java.lang.IllegalStateException: commit already called

この行で:actionBar.addTab(tab);

ft.replace(android.R.id.content, mFragment, mTag);

このようにして再び複製します

4

1 に答える 1

0

問題はコードではなく、ListViewMainActivity のActionBarコードにあります。を適切に取り付け、取り外し、交換していませんfragments。私は同じ問題を抱えています。MainActivity のコードを投稿してください。お手伝いします

交換する必要があります

ft.add(android.R.id.content, mFragment, mTag);

ft.replace(android.R.id.content, mFragment, mTag).commit();

したがって、内部のメソッドonTabSelected(Tab tab, FragmentTransaction ft)は次のようになります

 public void onTabSelected(Tab tab, FragmentTransaction ft) {
         // Check if the fragment is already initialized
                    if (mFragment == null) {
                        // If not, instantiate and add it to the activity
                        mFragment = Fragment.instantiate(mActivity, mClass.getName());
                        ft.replace(android.R.id.content, mFragment, mTag);
                    } else {
                        // If it exists, simply attach it in order to show it
                        ft.attach(mFragment);
                    }


    }

fragment現在のところ、コンテナに「追加」しているため、重複が発生します。

于 2013-06-06T16:47:06.110 に答える