Получить фрагмент фрагмента из FragmentActivity

У меня есть FragmentActivity где я добавляю Fragment . В зависимости от ситуации я хочу получить доступ к Buttons из макета этого фрагмента и изменить их.

Что я делаю:

 View view = myFragment.getView(); Button myButton = (Button) view.findViewById(R.id.my_button); myButton.setOnClickListener(new MyClickListener()); 

Но переменная view всегда равна null .

Как я могу получить представление о деятельности?

Solutions Collecting From Web of "Получить фрагмент фрагмента из FragmentActivity"

Если вы хотите получить доступ к своему компоненту и установить некоторые данные, я предлагаю вам сделать метод внутри фрагмента следующим образом:

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class DetailFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.details, container, false); return view; } public void setSettings(){ Button button = (Button) getView().findViewById(R.id.my_button); button.setOnClickListener(new MyClickListener()); } } 

попробуй это:

 public class YourFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.your_fragment, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); View view = getView(); if(view != null) { view.findViewById(R.id.my_button).setOnClickListener(new MyClickListener()); } } } 

Этот код должен работать нормально. Я надеюсь, что это поможет вам.

Чтобы установить OnClickListeners во фрагменты, переопределите onViewCreated в вашем классе фрагмента.

 @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.yourId).setOnClickListener(this); //or getActivity().findViewById(R.id.yourId).setOnClickListener(this); } 

Я пытался установить timertask для автоматической перезагрузки webview во фрагменте, и этот метод был единственным, что сработало для меня. Мой проект находится на github .

Источник: этот ответ

Когда вы инициализируете свою кнопку внутри класса, который расширяет Fragment , лучше сделать это внутри onViewCreated() . Это гарантирует, что представление уже существует.

Просто используйте метод getRootView() чтобы получить данные вашего фрагмента в Activity.

 //below block of code write in activity. EditText et = (EditText) v.getRootView().findViewById(R.id.name); Log.d("Name", et.getText().toString()); 

Name – это поле фрагмента.