Получить фрагмент фрагмента из FragmentActivity
У меня есть FragmentActivity
, где я добавляю Fragment
.
В зависимости от какой-либо ситуации я хочу получить доступ к Buttons
из этого макета фрагмента и изменить их для прослушивания.
Что я делаю:
View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());
Но переменная view
всегда null
.
Как я могу получить представление о деятельности?
Ответы
Ответ 1
Если вы хотите получить доступ к своему компоненту и установить некоторые данные, я предлагаю вам сделать метод внутри фрагмента следующим образом:
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());
}
}
Ответ 2
попробуйте следующее:
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());
}
}
}
этот код должен работать нормально.
Надеюсь, это поможет вам.
Ответ 3
Чтобы установить 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.
Источник: этот ответ
Ответ 4
Когда вы инициализируете свою кнопку внутри класса, который расширяет Fragment
, лучше сделать это внутри метода onViewCreated()
. Это гарантирует, что представление уже существует.
Ответ 5
Просто используйте метод 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 - это поле фрагмента.