从FragmentActivity获取Fragment的视图

Dra*_*mat 27 android android-fragments android-fragmentactivity

我有一个FragmentActivity我添加的地方Fragment.根据某些情况,我想Buttons从该片段的布局访问并更改它们的单击侦听器.

我所做的是:

View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());
Run Code Online (Sandbox Code Playgroud)

view变量总是如此null.

我如何获得活动的视图?

Jar*_*vis 29

如果你想访问你的组件并设置一些数据,我建议你在片段中创建一个方法,如下所示:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • getView()可能会返回null,并且在很多情况下会这样做.如果我从Activity的OnCreate方法调用setSettings,则会抛出异常 (3认同)

Vol*_*kiv 15

试试这个:

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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码必须正常工作.我希望这能帮到您.