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事件关联处理方法
如何使用 Kotlin 在 RecyclerView Adapter 中实现 onClick 并进行数据绑定