android之onclick事件及为adapter设置事件监听器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android之onclick事件及为adapter设置事件监听器相关的知识,希望对你有一定的参考价值。

android 的onclik事件的实现有三种写法:


 1 package com.example.oncliek;
 2 
 3 import android.app.Activity;
 4 import android.content.Context;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.MenuItem;
 8 import android.view.View;
 9 import android.view.View.OnClickListener;
10 import android.widget.Button;
11 import android.widget.Toast;
12 
13 
14 public class MainActivity extends Activity implements OnClickListener {
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         Button button1= (Button) findViewById(R.id.first);
21         Button button2=(Button) findViewById(R.id.second);
22         button2.setOnClickListener(this);
23         button1.setOnClickListener(new OnClickListener() {
24 
25             @Override
26             public void onClick(View v) {
27                 // 第一种方式直接对id实例化出来的button1对象设置OnClickListener
28                 //并且同时实现OnClickListener方法。这样做程序冗余不利于维护。通常不会这样做
29             Toast.makeText(getBaseContext(), "第一种方式", 0).show();
30             }
31         });
32     }
33     
34     @Override
35     public void onClick(View v) {
36         // 第二种方式通过让MainActivity继承OnClickListener接口
37         //并且实现其中的onClik方法,使得代码结构变得清晰
38         Toast.makeText(this, "第二种方式", 0).show();
39     }
40     public void on_clik(View v){
41         //通过直接为button设置:android:onClick="on_clik"
42         //无需再通过id实例化该button,节省了大力的代码
43         Toast.makeText(this, "第三种方式", 0).show();
44     }
45     
46 }
activity_main.xml:
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.example.oncliek.MainActivity" >
 6 
 7     <Button
 8         android:id="@+id/second"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_centerInParent="true"
12         android:gravity="center_vertical"
13         android:text="@string/secondway" />
14 
15     <Button
16         android:id="@+id/first"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:layout_above="@id/second"
20         android:layout_centerHorizontal="true"
21         android:gravity="center_vertical"
22         android:text="@string/firstway" />
23 
24     <Button
25         android:id="@+id/third"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:layout_below="@id/second"
29         android:layout_centerHorizontal="true"
30         android:gravity="center_vertical"
31         android:onClick="on_clik"
32         android:text="@string/thirdway" />
33 
34 </RelativeLayout>

为adapter设置事件监听器:

不能直接setOnClickListener

而需要用:setOnItemClickListener:单击事件

      setOnItemLongClickListener长按事件

其中setOnItemLongClickListener的返回值设置成true可以解除其与setOnItemClickListener的冲突。否则长按时也会返回单击事件的动作。
 1 package com.example.simpleadapter;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.app.Activity;
 9 import android.app.SearchManager.OnCancelListener;
10 import android.os.Bundle;
11 import android.view.Menu;
12 import android.view.MenuItem;
13 import android.view.View;
14 import android.view.View.OnClickListener;
15 import android.widget.AdapterView;
16 import android.widget.AdapterView.OnItemClickListener;
17 import android.widget.AdapterView.OnItemLongClickListener;
18 import android.widget.ListView;
19 import android.widget.SimpleAdapter;
20 import android.widget.Toast;
21 
22 public class MainActivity extends Activity implements OnItemClickListener ,OnItemLongClickListener {
23 
24     private ListView myview;
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_main);
29 
30         myview = (ListView) findViewById(R.id.listview);
31         List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
32         Map<String,Object> map=new HashMap<String, Object>();
33 
34         map.put("name", "phto1");
35         map.put("icon", R.drawable.zangsan);
36         data.add(map);
37 
38         map=new HashMap<String, Object>();
39         map.put("name", "photo2");
40         map.put("icon", R.drawable.lisi);
41         data.add(map);
42 
43         map=new HashMap<String, Object>();
44         map.put("name", "photo3");
45         map.put("icon", R.drawable.dufu);
46         data.add(map);
47 
48         map=new HashMap<String, Object>();
49         map.put("name", "photo4");
50         map.put("icon", R.drawable.ic_launcher);
51         data.add(map);
52 
53         map=new HashMap<String, Object>();
54         map.put("name", "photo5");
55         map.put("icon", R.drawable.zangsan);
56         data.add(map);
57 
58         map=new HashMap<String, Object>();
59         map.put("name", "photo6");
60         map.put("icon", R.drawable.liusi);
61         data.add(map);
62 
63         SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.listview_item, 
64                 new String[]{"name","icon"}, new int[]{R.id.tv_name,R.id.iv_icon});
65         myview.setAdapter(adapter);
66         myview.setOnItemClickListener(this);       //设置短按事件
67         myview.setOnItemLongClickListener(this);   //设置长按事件
68     }
69     @Override
70     public void onItemClick(AdapterView<?> parent, View view, int position,
71             long id) {
72         // TODO Auto-generated method stub
73         Toast.makeText(this, "短按显示", 0).show();
74     }
75     @Override
76     public boolean onItemLongClick(AdapterView<?> parent, View view,
77             int position, long id) {
78         // TODO Auto-generated method stub
79         Toast.makeText(this, "长按显示", 0).show();
80         return true;      //返回true时可以解除长按与短按的冲突。
81     }
82 }
activity_main.xml:
 1 <RelativeLayout 
 2     xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context="com.example.simpleadapter.MainActivity" >
 7 
 8     <ListView
 9         android:id="@+id/listview"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"/>
12 
13 </RelativeLayout>

listview_item.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:layout_gravity="center_vertical"
 6     android:orientation="horizontal"
 7     android:padding="10dip" >
 8 
 9     <ImageView
10         android:id="@+id/iv_icon"
11         android:layout_width="50dip"
12         android:layout_height="50dip" />
13 
14     <TextView
15         android:id="@+id/tv_name"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_marginLeft="10dip"
19         android:onClick="goon" />
20 
21 </LinearLayout>

 

 

 

package com.example.oncliek;
import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1= (Button) findViewById(R.id.first);Button button2=(Button) findViewById(R.id.second);button2.setOnClickListener(this);button1.setOnClickListener(new OnClickListener() {
@Overridepublic void onClick(View v) {// 第一种方式直接对id实例化出来的button1对象设置OnClickListener//并且同时实现OnClickListener方法。这样做程序冗余不利于维护。通常不会这样做Toast.makeText(getBaseContext(), "第一种方式", 0).show();}});}@Overridepublic void onClick(View v) {// 第二种方式通过让MainActivity继承OnClickListener接口//并且实现其中的onClik方法,使得代码结构变得清晰Toast.makeText(this, "第二种方式", 0).show();}public void on_clik(View v){//通过直接为button设置:android:onClick="on_clik"//无需再通过id实例化该button,节省了大力的代码Toast.makeText(this, "第三种方式", 0).show();}}

 

以上是关于android之onclick事件及为adapter设置事件监听器的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之布局文件里实现OnClick事件关联处理方法

Android官方文档之Calendar Provider

如何使用 Kotlin 在 RecyclerView Adapter 中实现 onClick 并进行数据绑定

Android之提示Toast

从 Activity C# 之外的 OnClick 事件启动 Activity

Android之Adapter用法总结(转)