31

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

我要做的是:

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

view变量始终是null

如何获得活动的视图?

4

5 回答 5

34

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

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());
    }
}
于 2013-06-10T12:10:14.987 回答
18

试试这个:

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());
        }
    }
}

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

于 2013-06-10T12:26:36.460 回答
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 上

来源:这个答案

于 2015-09-27T03:27:26.423 回答
1

当您在扩展的类中初始化按钮时,Fragment最好在onViewCreated()方法中进行。这将保证视图已经存在。

于 2015-12-10T15:09:32.750 回答
0

只需使用该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 是片段的字段。

于 2016-11-23T07:54:05.180 回答