1

こんにちは、2 つのタブを表示するアクション バー ナビゲーション画面を開発しようとしています。onTabselected リスナーでフラグメントをアクティブにしています。しかし、fragementtransaction.commit() を呼び出すまで、変更は反映されません。つまり、一度しか機能しません。つまり、tab2 に切り替えて、再び tab1 に戻ると、フラグメントは更新されません。tab2 に切り替えると、tab2 の内容は次のようになります。 tab1 の上に描画され、重なっているように見えます。私のコードをここに投稿しています。この問題の解決を手伝ってください。

これが私のクラスです:

public class ContentActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle arg0) {
     this.requestWindowFeature(Window.FEATURE_ACTION_BAR);
       // this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND,
               // WindowManager.LayoutParams.FLAG_DIM_BEHIND);
     //this.getWindow().setDimAmount((float) 30.0);
        LayoutParams params = this.getWindow().getAttributes(); 
        params.height = LayoutParams.WRAP_CONTENT; //fixed height
        params.width = LayoutParams.MATCH_PARENT; //fixed width

       this.getWindow().setGravity(Gravity.START);
        this.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); 
    super.onCreate(arg0);
    setContentView(R.layout.layout_content);

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

    ActionBar.Tab BookMarkTab = actionbar.newTab().setText("BookMarks");
    ActionBar.Tab NotesTab = actionbar.newTab().setText("Notes");

//  Fragment bookMarkFragment = new BookMarkFragment();
    //Fragment notesFragment = new NotesFragment();

    BookMarkTab.setTabListener(new ContentTabListner(BookMarkFragment.class,"BookMarks"));
    NotesTab.setTabListener(new ContentTabListner(NotesFragment.class,"Notes"));

    actionbar.addTab(BookMarkTab);
    actionbar.addTab(NotesTab);
}

class ContentTabListner implements ActionBar.TabListener {
    private Fragment fragment;
    private Class  mclz;
    private String mTag;
    android.support.v4.app.FragmentTransaction fft = ContentActivity.this
            .getSupportFragmentManager().beginTransaction();

    public ContentTabListner(Class clazz,String tag) {
        mclz = clazz;
        mTag = tag;

        fragment = ContentActivity.this.getSupportFragmentManager().findFragmentByTag(mTag);
            if (fragment != null && !fragment.isDetached()) {
                android.support.v4.app.FragmentTransaction ft = ContentActivity.this.getSupportFragmentManager().beginTransaction();
                ft.detach(fragment);
                ft.commit();
            }
    }

    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {

    }

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        if(fragment == null){
            fragment = Fragment.instantiate(ContentActivity.this, mclz.getName(),null);
            fft.add(android.R.id.content,fragment, mTag);
            fft.commit();
        }else{
            fft.attach(fragment);
        }
    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
        if(fragment != null){
            fft.detach(fragment);
        }
    }

}
}
4

1 に答える 1

0

FragmentActivityの代わりにActivityを使用することをお勧めします。

于 2013-03-14T06:13:25.523 に答える