首页 > 代码库 > Fragment中点击事件

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中点击事件