2014-01-17 4 views
0

Скажем, целевое приложение построено из 3-х фрагментов, которые находятся в одной активности public class MainActivity extends android.support.v4.app.FragmentActivity implements ActionBar.TabListener. Начиная фрагмент public class ButtonSectionFragment extends Fragment где есть Button:Возвращение к представлениям из разных фрагментов в той же деятельности

public class ButtonSectionFragment extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.btn, container, false); 
    Button mybutton = (Button) rootView.findViewById(R.id.mybutton); 

    mybutton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ???????????????????? 

    } 
}); 
} 

?? Есть в методе onClick, я доберусь до этого. И есть еще один фрагмент, как это:

public static class TextSectionFragment extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.tv, container, false); 

    TextView textv = (TextView) rootView.findViewById(R.id.texty); 
} 

Оба фрагментов используют разные форматы, поэтому rootView используется прямо перед findViewById.

. Результат, который я хотел бы достичь: Button из 1-го фрагмента щелкнуть на TextView от 2-го фрагмента до Hello. Что я должен положить в часть ???, чтобы все это работало?

ответ

2

Вам необходимо использовать интерфейс в качестве обратного вызова для активности, а затем установить текстовое представление в фрагменте.

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

http://developer.android.com/training/basics/fragments/communicating.html.

Framgent1 -> Деятельность -> Фрагмент2.

Вы можете переписать значение из фрагмента2 в действие сначала, а затем из действия в фрагмент2. Затем установите текст в FRAGMENT2

+0

Я собирался его написать. +1 – Kristopher

1

Вы просто должны использовать getActivity().findViewById() вместо getView().findViewById()

final TextView tv = (TextView) getActivity().findViewById(R.id.texty); 
if (tv != null) 
    tv.setText("Hello"); 

Фрагменты просто ветви внутри общей компоновки дерева деятельности. Доступ ко всем фрагментам общей активности можно получить через Activity.findViewByXXX(). Единственное осложнение заключается в том, что фрагменты можно динамически добавлять, удалять, заменять и т. Д. Поэтому вы должны быть уверены, что нужный фрагмент уже завышен в иерархии макета. Вы можете сделать инициализацию пользовательского интерфейса в onViewCreated() другого фрагмента. Это гарантирует, что макет уже загружен.

0
Fragment frag1 = new ButtonSectionFragment(); 
    Fragment frag2 = new TextSectionFragment(); 
    FragmentManager   fm  = getSupportFragmentManager(); 
    FragmentTransaction  ft  = fm.beginTransaction(); 

    ft.add(layout, frag1); 
    ft.add(layout, frag2); 
    ft.commit(); 

    View frag1RootView = frag1.getView(); 
    View frag2RootView = frag2.getView(); 

    Button btn = (Button)frag1RootView.findViewById(id); 
    TextView tv = (TextView)frag2RootView.findViewById(id); 

непроверенной, но ... Я думаю, что бы это сделать ...

EDIT: Вы должны получить мнения коренных onActivityCreated(); или он подаст вам нуль ...

Смежные вопросы