原因是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> |