zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    使用MVC框架中要注意的问题(八):HandleError
    HttpModule中真的不能读写Session吗?
    使用MVC框架中要注意的问题(二):将Model和Controller单独用一个项目设计
    Linq TO SQL 虽好,但不要滥用
    div如何实现左右两个panel并排,而且高度一致
    Required Content Placeholders in SharePoint Masterpages
    LINQ TO SQL:直接执行查询和命令
    使用MVC框架中要注意的问题(三):如何为链接指定路径
    SharePoint Server 2007 页面模型{转载}
    使用MVC框架中要注意的问题(四):ActionLink只是执行Get的操作
  • 原文地址:https://www.cnblogs.com/solar-sys/p/5994250.html
Copyright © 2011-2022 走看看