原因是button強制擷取了item的焦點,隻要設定button的focusable為false即可。
1 import android.app.Activity;
2 import android.app.AlertDialog;
3 import android.content.Context;
4 import android.os.Bundle;
5 import android.view.LayoutInflater;
6 import android.view.Menu;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.AdapterView;
10 import android.widget.BaseAdapter;
11 import android.widget.Button;
12 import android.widget.ImageView;
13 import android.widget.ListView;
14 import android.widget.TextView;
15 import android.widget.Toast;
16
17 public class Audition1 extends Activity {
18
19 private ListView listView;
20
21 @Override
22 public void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24 setContentView(R.layout.activity_audition1);
25 initComponents();
26
27 }
28
29 private void initComponents() {
30 listView = (ListView) findViewById(R.id.listView);
31 listView.setAdapter(new MyAdapter(this));
32 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
33
34 @Override
35 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
36 long arg3) {
37 Toast.makeText(getApplicationContext(), "item", 300).show();
38
39 }
40 });
41 }
42
43 @Override
44 public boolean onCreateOptionsMenu(Menu menu) {
45 getMenuInflater().inflate(R.menu.activity_audition1, menu);
46 return true;
47 }
48
49 public final class ViewHolder {
50 public TextView textView;
51 public Button button;
52 public ImageView imageView;
53 }
54
55 class MyAdapter extends BaseAdapter {
56
57 private LayoutInflater mInflater;
58
59 public MyAdapter(Context context) {
60 this.mInflater = LayoutInflater.from(context);
61 }
62
63 @Override
64 public int getCount() {
65 return 3;
66 }
67
68 @Override
69 public Object getItem(int position) {
70 return null;
71 }
72
73 @Override
74 public long getItemId(int position) {
75 return position;
76 }
77
78 @Override
79 public View getView(int position, View convertView, ViewGroup parent) {
80 ViewHolder holder = null;
81 if (convertView == null) {
82 holder = new ViewHolder();
83
84 convertView = mInflater.inflate(R.layout.item, null);
85 holder.imageView = (ImageView) convertView
86 .findViewById(R.id.imageView);
87 holder.textView = (TextView) convertView
88 .findViewById(R.id.textViewId);
89 holder.button = (Button) convertView.findViewById(R.id.button);
90 holder.textView.setText("shit");
91 holder.button.setOnClickListener(new View.OnClickListener() {
92
93 @Override
94 public void onClick(View v) {
95 AlertDialog.Builder builder = new AlertDialog.Builder(
96 Audition1.this);
97 builder.setMessage("dialog");
98 builder.setTitle("title");
99 builder.create();
100 builder.show();
101 }
102 });
103 convertView.setTag(holder);
104 } else {
105 convertView.getTag();
106 }
107
108 return convertView;
109 }
110
111 }
112
113 }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="@dimen/padding_medium"
tools:context=".Audition1"
android:dividerHeight="5dp"/>
</RelativeLayout>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "fill_parent" android:layout_height= "match_parent" android:orientation= "horizontal" > <TextView android:id= "@+id/textViewId" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "@string/hello_world" /> <ImageView android:id= "@+id/imageView" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:src= "@drawable/ic_launcher" android:contentDescription= "@string/app_name" /> <Button android:id= "@+id/button" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "press" android:focusable= "false" /> </LinearLayout> |
1 import android.app.Activity;
2 import android.app.AlertDialog;
3 import android.content.Context;
4 import android.os.Bundle;
5 import android.view.LayoutInflater;
6 import android.view.Menu;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.AdapterView;
10 import android.widget.BaseAdapter;
11 import android.widget.Button;
12 import android.widget.ImageView;
13 import android.widget.ListView;
14 import android.widget.TextView;
15 import android.widget.Toast;
16
17 public class Audition1 extends Activity {
18
19 private ListView listView;
20
21 @Override
22 public void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24 setContentView(R.layout.activity_audition1);
25 initComponents();
26
27 }
28
29 private void initComponents() {
30 listView = (ListView) findViewById(R.id.listView);
31 listView.setAdapter(new MyAdapter(this));
32 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
33
34 @Override
35 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
36 long arg3) {
37 Toast.makeText(getApplicationContext(), "item", 300).show();
38
39 }
40 });
41 }
42
43 @Override
44 public boolean onCreateOptionsMenu(Menu menu) {
45 getMenuInflater().inflate(R.menu.activity_audition1, menu);
46 return true;
47 }
48
49 public final class ViewHolder {
50 public TextView textView;
51 public Button button;
52 public ImageView imageView;
53 }
54
55 class MyAdapter extends BaseAdapter {
56
57 private LayoutInflater mInflater;
58
59 public MyAdapter(Context context) {
60 this.mInflater = LayoutInflater.from(context);
61 }
62
63 @Override
64 public int getCount() {
65 return 3;
66 }
67
68 @Override
69 public Object getItem(int position) {
70 return null;
71 }
72
73 @Override
74 public long getItemId(int position) {
75 return position;
76 }
77
78 @Override
79 public View getView(int position, View convertView, ViewGroup parent) {
80 ViewHolder holder = null;
81 if (convertView == null) {
82 holder = new ViewHolder();
83
84 convertView = mInflater.inflate(R.layout.item, null);
85 holder.imageView = (ImageView) convertView
86 .findViewById(R.id.imageView);
87 holder.textView = (TextView) convertView
88 .findViewById(R.id.textViewId);
89 holder.button = (Button) convertView.findViewById(R.id.button);
90 holder.textView.setText("shit");
91 holder.button.setOnClickListener(new View.OnClickListener() {
92
93 @Override
94 public void onClick(View v) {
95 AlertDialog.Builder builder = new AlertDialog.Builder(
96 Audition1.this);
97 builder.setMessage("dialog");
98 builder.setTitle("title");
99 builder.create();
100 builder.show();
101 }
102 });
103 convertView.setTag(holder);
104 } else {
105 convertView.getTag();
106 }
107
108 return convertView;
109 }
110
111 }
112
113 }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="@dimen/padding_medium"
tools:context=".Audition1"
android:dividerHeight="5dp"/>
</RelativeLayout>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "fill_parent" android:layout_height= "match_parent" android:orientation= "horizontal" > <TextView android:id= "@+id/textViewId" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "@string/hello_world" /> <ImageView android:id= "@+id/imageView" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:src= "@drawable/ic_launcher" android:contentDescription= "@string/app_name" /> <Button android:id= "@+id/button" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "press" android:focusable= "false" /> </LinearLayout> |