2

У меня есть несколько фрагментов. Некоторые фрагменты имеют одни и те же кнопки в верхней и нижней частях фрагмента, но контент отличается.Доступ к текстовому полю вложенного фрагмента

Поэтому я использую вложенные фрагменты для верхней и части buttom. Это мой класс java: LogFragment.java. Я вставляю два фрагмента для верхней навигации и нижний колонтитул внизу.

public class LogFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View rootview = inflater.inflate(R.layout.fragment_log, container, false); 

     Fragment navigationFrag = new NavigationFrag(); 
     FragmentTransaction trans1 = getChildFragmentManager().beginTransaction(); 
     trans1.add(R.id.navigationFrag, navigationFrag).commit(); 

     Fragment footerFragment = new FooterFragment(); 
     FragmentTransaction trans2 = getChildFragmentManager().beginTransaction(); 
     trans2.add(R.id.footerFragment, footerFragment).commit(); 

     return rootview; 
    } 
} 

Это файл макета: fragment_log.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <FrameLayout android:id="@+id/NavigationFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:orientation="vertical"> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Start"/> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Stop" 
      android:layout_below="@+id/button1"/> 

    </RelativeLayout> 

    <FrameLayout android:id="@+id/FooterFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

вложенной NavigationFragment и FooterFragment содержит некоторые кнопки, изображения или текстовые поля. Например: fragment_footer.xml:

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

     <TextView 
      android:id="@+id/logInfo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="LOG" /> 

</RelativeLayout> 

Мой вопрос:

Как я могу получить доступ к/манипулировать/заполнить некоторые данные элементов в моих вложенных фрагментов в LogFragment.java класса ?


Например:

Я хочу, чтобы получить доступ к TextView с идентификатором logInfo вложенной fragment_footer.xml по LogFragment.java.

ответ

2

Просто используйте [child fragment].getView().findViewById(R.id.[elemnet id]), чтобы получить элементы в вложенных фрагментах. Например:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View rootview = inflater.inflate(R.layout.fragment_log, container, false); 

    Fragment navigationFrag = new NavigationFrag(); 
    FragmentTransaction trans1 = getChildFragmentManager().beginTransaction(); 
    trans1.add(R.id.navigationFrag, navigationFrag).commit(); 

    final Fragment footerFragment = new FooterFragment(); 
    FragmentTransaction trans2 = getChildFragmentManager().beginTransaction(); 
    trans2.add(R.id.footerFragment, footerFragment).commit(); 

    Button btn1 = (Button)rootview.findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      TextView txv = (TextView)footerFragment.getView().findViewById(R.id.logInfo); 
      txv.setText("Updated log of Footer"); 
     } 
    }); 

    return rootview; 
} 

Кстати,

  1. фрагмент ребенка доступен для доступа только после onCreateView()
  2. поэтому вам нужно объявить фрагмент ребенка в качестве конечных или членов данных родитель.
Смежные вопросы