从FragmentActivity获取Fragment的视图

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

我所做的是:

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

但是viewvariables始终为null

我如何获得活动的视图?

Solutions Collecting From Web of "从FragmentActivity获取Fragment的视图"

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

 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是片段的字段。