3

Android アプリで次の問題が発生しました。

タブとしていくつかのフラグメントを含む TabHost があります。これらのフラグメントは、プログラムによって追加されています。タブのコンテンツを別のフラグメントに置き換えたいと思います。そして、それを達成する方法がわかりません。xml 経由で追加されたフラグメントを置き換える方法を見つけましたが、それは私が達成しようとしているものではありません。

ご提案いただきありがとうございます。

編集: 要求されたソース (関連する部分のみ、さらに必要な場合は教えてください)

タブホストを初期化し、タブ/フラグメントをプログラムで追加する方法があります。

private void initialiseTabHost(Bundle args) {
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();

    addUserListTab(args);
    //methods to add other tabs


    mTabHost.setOnTabChangedListener(this);
}

private void addUserListTab(Bundle args){
    TabInfo tabInfo = null;
    LayoutParams tabIconParams = new LayoutParams(200, 110);
    tabIconParams.setMargins(0, 0, 0, 0);
    View userIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator,mTabHost, false);
    ImageView userIcon = (ImageView) userIndicator.findViewById(R.id.tab_icon);  
    userIcon.setLayoutParams(tabIconParams);
    TabSpec specUser = mTabHost.newTabSpec("user");
    specUser.setIndicator(userIndicator);
    userIcon.setImageDrawable(getResources().getDrawable(R.drawable.selector_user));
    userIcon.setScaleType(ImageView.ScaleType.FIT_CENTER);

    AddTab(this, this.mTabHost, specUser, ( tabInfo = new TabInfo("user", ListUserFragment.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);

}
private static void AddTab(MainActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
    // Attach a Tab view factory to the spec
    tabSpec.setContent(activity.new TabFactory(activity));
    tabHost.addTab(tabSpec);
}

問題は、プログラムでタブホストに追加した ListUserFragment を置き換える方法がわからないことです。タブホストのコンテナーを渡すときに、現在の 4 つのタブのどのタブに新しいフラグメントを含め、もちろん古いフラグメントを削除/非表示にするかを指定するにはどうすればよいですか。

4

1 に答える 1

1

現在のものを別のものに置き換えるには、 を取得しFragmentManagerて a を開始する必要があります。FragmentTransactionFragment

 getFragmentManager().beginTransaction().replace(R.id.container, new Fragment()).commit();

公式のフラグメント ガイドも必ずお読みください。.

于 2013-01-24T15:32:35.327 に答える