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();}}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM