Подтвердить что ты не робот

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

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

Что я делаю:

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

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

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

4b9b3361

Ответ 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 - это поле фрагмента.