Fragment中点击事件
Posted 天殇黑侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment中点击事件相关的知识,希望对你有一定的参考价值。
第一种:
1 private View view,view2; 2 private Button btn; 3 4 5 @Override 6 public View onCreateView(LayoutInflater inflater, ViewGroup container, 7 Bundle savedInstanceState) { 8 // TODO Auto-generated method stub 9 10 view = inflater.inflate(R.layout.fragment1, null); 11 btn = (Button) view.findViewById(R.id.button); 12 //return view2=inflater.inflate(R.layout.fragment1, null);//错误的写法 13 return view; 14 } 15 16 @Override 17 public void onActivityCreated(Bundle savedInstanceState) { 18 // TODO Auto-generated method stub 19 super.onActivityCreated(savedInstanceState); 20 21 22 btn.setOnClickListener(new OnClickListener() { 23 24 @Override 25 public void onClick(View v) { 26 // TODO Auto-generated method stub 27 Toast.makeText(getActivity(), "success2", 0).show(); 28 } 29 }); 30 } 31 32 }
它的一个基本的格式
1.onCreateView:将控件的初始化放在其中。(view.findViewById(R.id.button))
2.onActivityCreated :将控件的点击事件的代码放在其中。
首先解释一下第一种写法可能出现的问题,这个我自己出现过所以深有体会。
onCreateView()方法的返回值问题
如果你的返回值view与 你用来查找控件的view对象是同一个,则正常执行。
假如你的return语句跟我上面代码的注释部分一样,那么就会出现点击事件无响应。
第二种:
1 private Button btn; 2 3 4 @Override 5 public View onCreateView(LayoutInflater inflater, ViewGroup container, 6 Bundle savedInstanceState) { 7 // TODO Auto-generated method stub 8 9 return inflater.inflate(R.layout.fragment1, null); 10 } 11 12 @Override 13 public void onActivityCreated(Bundle savedInstanceState) { 14 // TODO Auto-generated method stub 15 super.onActivityCreated(savedInstanceState); 16 17 btn = (Button) getActivity().findViewById(R.id.button); 18 19 btn.setOnClickListener(new OnClickListener() { 20 21 @Override 22 public void onClick(View v) { 23 // TODO Auto-generated method stub 24 Toast.makeText(getActivity(), "success2", 0).show(); 25 } 26 }); 27 } 28 29 }
1.onActivityCreated 控件的初始化 getActivity().findViewById(R.id.button);
2.onActivityCreated 点击事件
这里特别注意的是 如果使用getActivity().findViewById(R.id.button);这种方法查找控件,则该语句必须写在onActivityCreated方法中。
因为fragment在执行onCreateView()方法的时候上一层的activity还没有调用oncreate方法。这时候fragment中的onCreateView()方法使用getactivity()得到的是null
运行时直接 nullpointerexception
以上是关于Fragment中点击事件的主要内容,如果未能解决你的问题,请参考以下文章