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


  • 相关阅读:
    面试中要注意的 3 个 JavaScript 问题
    angularJS遇到的坑
    为什么你的前端工作经验不值钱?
    ceph pg常见的几种状态
    k8s网络之flannel
    k8s流量访问之service
    lvs+keepalived高可用
    iptables【学习笔记】
    Linux和OpenStack中的网络知识【学习笔记】
    服务器BIOS设置
  • 原文地址:https://www.cnblogs.com/solar-sys/p/5994250.html
Copyright © 2011-2022 走看看