2013-10-24 18 views
7

私は完全に混乱しています。 thisthisおよび多数の他のソース、両方のSOで、他の場所によると、私は次の操作を行うことができる必要があります:フラグメントを動的に追加する

import android.os.Bundle; 
import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.view.Menu; 

public class MainScreenActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_screen); 
    MainRightFragment mrf = new MainRightFragment(); 
    RecommendedFragment rf = new RecommendedFragment(); 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(R.id.main_search_boxes, mrf, "fragmentright"); 
    ft.add(R.id.main_left_side, rf, "fragmentreccomend"); 
} 

}

R.id参照は、私の中でframeLayoutのオブジェクトを指します。 xmlファイル。なぜ私はまだ "を取得していますか?FragmentTransactionタイプのadd(int、Fragment、String)メソッドは引数(int、RecommendedFragment、String)には適用されません"というエラーメッセージが表示されますか?

+1

あなたはRecommendedFragmentフラグメントを拡張してよろしいですか? 1つのフラッグだけで動作しますか?両方の間でコミットしようとしましたか? – Poutrathor

答えて

8

お客様のMainScreenActivityFragmentActivityで、Activityではありません。 また、電話するのを忘れないでくださいft.commit();

0

これを試してください。

FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(FragmentA.this.getParent().getID(), mNewFragment,"your frame name"); 
ft.addToBackStack(null); 
ft.commit(); 
+0

あなたの例のFragmentAはクラスかインスタンスですか?どちらの場合でも、あなたのコードをコンパイルすることはできますか?( –

+0

@AharonManne:上記のコードでは、 'MainRightFragment mrf = new MainRightFragment();を使用して起動したmrf' Fragment'で 'mNewFragment'を置き換えます。 –

+1

@AharonManne:あなたのクラスを 'Activity'の代わりに' FragmentActivity'で拡張してください –

1

これは、答えよりも降伏の詳細ですが、私はFragmentActivity/support.v4.appを使用して欲しかったものを手に入れることができました。私はまだ私が上記で引用した参考文献が現代のAPIで.add(...)関数を使用することが可能であると言うように思われる理由はまだ分かりません。
harsha.csとDamienの両方がFragmentActivityを指しているので、なぜ後方互換性APIを使用する必要があるのか​​誰かが説明するまで、私は両方のポイントを与え、答えのチェックを止めます。

3

からあなたの主な活動を拡張する必要に実行時のフラグメントを追加するには:android.support.v4.app.FragmentActivity

そして、あなたはandroid.support.v4からクラスFragmentManagerとFragmentTransactionを使用する必要がありますandroid.appの代わりに.appパッケージを使用してください。

また、FragmentManagerを取得するときにgetSupportFragmentManager()メソッドを使用します。以下のコードを参照してください:

FragmentManager fm = getSupportFragmentManager(); 

FragmentTop fragTop = new FragmentTop(); 
FragmentLeft fragLeft = new FragmentLeft(); 

FragmentTransaction ft = fm.beginTransaction(); 

ft.add(R.id.fragTop, fragTop); 
ft.add(R.id.fragLeft, fragLeft); 

ft.commit(); 

参考:http://developer.android.com/intl/pt-br/training/basics/fragments/fragment-ui.html

関連する問題