2012-01-03 10 views
3

リストアイテムが別のフラグメントからクリックされたときに、フラグメント内に毎回異なるレイアウトをロードしたいという問題があります。私は画面上に2つの断片があり、最初はListViewであり、別のものはリストビューからクリックしたアイテムに応じて異なるレイアウトを表示したいということを意味します。About Usアイテムをクリックすると、DetailsパネルがAbout Usのレイアウトを表示し、 on連絡先詳細ペインはそれに応じて変更されます。現在、レイアウトは実行時に作成されたイメージを表示しています。正しい結果を得るために私に提案してください。フラグメンテーションで別のレイアウトを表示

私の主な活動:

public class FragmentTestActivity extends Activity implements OnItemClickListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ListView l = (ListView) findViewById(R.id.number_list); 
     ArrayAdapter<String> numbers = new ArrayAdapter<String>(getApplicationContext(), 
       android.R.layout.simple_list_item_1, 
       new String [] { 
      "About US", "Contact Us", "Services", "four", "five", "six" 
     }); 
     l.setAdapter(numbers); 
     l.setOnItemClickListener(this); 
    } 

    /** 
    * Add a Fragment to our stack with n Androids in it 
    */ 
    private void stackAFragment(int nAndroids) { 
     Fragment f = new TestFragment(nAndroids); 

     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.replace(R.id.the_frag, f); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 

    /** 
    * Called when a number gets clicked 
    */ 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     stackAFragment(position); 
    } 
} 

詳細ペインエリア:あなたは、異なるデータ型のために別々のFragmentsを使用した場合

public class TestFragment extends Fragment { 
    private int nAndroids; 

    public TestFragment() { 

    } 

    /** 
    * Constructor for being created explicitly 
    */ 
    public TestFragment(int nAndroids) { 
     this.nAndroids = nAndroids; 
    } 

    /** 
    * If we are being created with saved state, restore our state 
    */ 
    @Override 
    public void onCreate(Bundle saved) { 
     super.onCreate(saved); 
     if (null != saved) { 
      nAndroids = saved.getInt("nAndroids"); 
     } 
    } 

    /** 
    * Save the number of Androids to be displayed 
    */ 
    @Override 
    public void onSaveInstanceState(Bundle toSave) { 
     toSave.putInt("nAndroids", nAndroids); 
    } 

    /** 
    * Make a grid and fill it with n Androids 
    */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) { 
     int n; 

     Context c = getActivity().getApplicationContext(); 
     LinearLayout l = new LinearLayout(c); 

     for (n = 0; n < nAndroids; n++) { 
      ImageView i = new ImageView(c); 
      i.setImageResource(R.drawable.android); 
      l.addView(i); 
     } 
     return l; 
    } 
} 

答えて

0

はおそらく(クリーナー設計)したほうが良いでしょうあなたはプレゼンテーションをしています。これにより、Fragmentsクリーナーが維持され、は適切なFragmentを作成して、コンテナビューの前のものと置き換えることができます。しかし、の場合、実際にはのように記述したい場合は、Fragmentに引数 "Bundle"を渡し、Fragmentは適切なレイアウトファイルとロジックを展開するために使用することができます。

引数とフラグメントを使用した詳細と例については、このデベロッパーガイドを参照してください。