• 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


  • 相关阅读:
    Javaweb中的监听器
    Maven
    Ajax
    jQuery
    Spring入门
    spring boot实战——微信点餐系统02:接口信息,分页工具,gson, 注解信息,表单验证,字段返回(时间处理,null处理)
    Nginx
    Spring Data JPA
    spring boot实战——微信点餐系统01:开始代码
    spring boot实战——微信点餐系统00:项目设计,环境搭建
  • 原文地址:https://www.cnblogs.com/solar-sys/p/5994250.html
Copyright © 2020-2023  润新知