我有FragmentActivity
我在其中添加Fragment
。
根据某些情况,我想从该片段的布局中访问Buttons
并更改它们的点击监听器。
我的工作是:
View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());
但view
变量始终为null
。
如何查看活动视图?
答案 0 :(得分: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());
}
}
答案 1 :(得分: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());
}
}
}
此代码必须正常工作。 我希望,这会对你有帮助。
答案 2 :(得分:2)
要在片段中设置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。
来源:this answer
答案 3 :(得分:1)
在扩展Fragment
的类中初始化按钮时,最好在onViewCreated()
方法中执行此操作。这将保证视图已存在。
答案 4 :(得分:1)
只需使用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是片段的字段。