2013-05-03 2 views
1

Я работаю над Fragment-ListView и получаю вывод, изображающий на изображении. каждый щелчок Изменяет TextView фрагмента2.Завершится нормально.ListFragment с другим макетом

fragmetn1 для listView и фрагмент2 для DifferentView.

Теперь я хочу изменить макет в фрагменте2 щелчком. например как щелчок item2, макет с набором textView в фрагменте2. теперь с выбором пункта 3, разный макет с Button должен быть установлен на фрагмент2.

мой код getView находится здесь.

public void onListItemClick(ListView l, View v, int position, long id) { 

     DetailFrag frag = (DetailFrag) getFragmentManager().findFragmentById(R.id.frag_detail); 

     if (frag != null && frag.isInLayout()) { 
      frag.setText("item "+position+" selected"); 
     } 
    } 

есть другой способ сделать это, плз также помочь таким образом.

любое предложение было бы очень оценено. Спасибо заранее.

enter image description here

ответ

0

Попробуйте следующий метод

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

, то вам нужно добавить фрагмент к этому fragmentTransaction со следующим синтаксисом.

fragmentTransaction.replace(R.id.detailFragment, layout1); 

И, наконец, вы ДОЛЖНЫ совершить транзакцию. В противном случае изменения не будут сохраняться.

fragmentTransaction.commit(); 

Для примера см. Этот блог post. Я надеюсь, что это поможет вам.

спасибо.

0

На мой взгляд, вы должны использовать разные фрагменты с разным расположением и использовать FragmentTransaction для замены существующего.

0

Возможно, ваш подход работает нормально, но, вероятно, лучше использовать более слабосвязанный подход, когда ListFragment информирует о хостинговой активности, на которую был нажат элемент, а затем действие сообщает об обновлении «другого» фрагмента.

Не нужно беспокоиться о создании и замене новых фрагментов.

Образец активности

public class TestActivity extends Activity implements TestFragmentBListener { 
    private TestFragmentA mOtherFragment; 
    private TestFragmentB mListFrag; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     mListFrag = (TestFragmentB) getFragmentManager().findFragmentById(R.id.fragment_b_list); 
     mOtherFragment = (TestFragmentA) getFragmentManager().findFragmentById(R.id.fragment_a_text); 
    } 

    @Override 
    public void onTestFragmentBItemCLicked(int position) { 
     // Implemented from TestFragmentB.TestFragmentBListener 
     mOtherFragment.setText("item " + position + " selected."); 
    } 
} 

Образец Fragmenta (содержит текст .. это не работает, только в качестве примера)

public class TestFragmentA extends Fragment { 
    public void setText(String text) { 
    } 
} 

Образец ListFragment, который определяет интерфейс для образца деятельность по осуществлению

public class TestFragmentB extends ListFragment { 
    private TestFragmentBListener mListener = null; 

    public interface TestFragmentBListener { 
     void onTestFragmentBItemCLicked(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (TestFragmentBListener) activity; 
     } catch (ClassCastException ccex) { 
      // activity does not implement our listener 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     if (mListener != null) { 
      mListener.onTestFragmentBItemCLicked(position); 
     } 
    } 
} 

и для полноты картины, здесь был мой макет для деятельности образца:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".TestActivity" > 

    <fragment 
     android:id="@+id/fragment_a_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <fragment 
     android:id="@+id/fragment_b_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/fragment_a_text" /> 

</RelativeLayout> 
Смежные вопросы