关于ListView中控件点击事件与Item点击事件冲突的问题

2/13/2017来源:iOS开发人气:871

public class Audition1 extends Activity {     PRivate ListView listView;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_audition1);         initComponents();     }     private void initComponents() {         listView = (ListView) findViewById(R.id.listView);         listView.setAdapter(new MyAdapter(this));         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {             @Override             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                     long arg3) {                 Toast.makeText(getapplicationContext(), "item", 300).show();             }         });     }     @Override     public boolean onCreateOptionsMenu(Menu menu) {         getMenuInflater().inflate(R.menu.activity_audition1, menu);         return true;     }     public final class ViewHolder {         public TextView textView;         public Button button;         public ImageView imageView;     }     class MyAdapter extends BaseAdapter {         private LayoutInflater mInflater;         public MyAdapter(Context context) {             this.mInflater = LayoutInflater.from(context);         }         @Override         public int getCount() {             return 3;         }         @Override         public Object getItem(int position) {             return null;         }         @Override         public long getItemId(int position) {             return position;         }         @Override         public View getView(int position, View convertView, ViewGroup parent) {             ViewHolder holder = null;             if (convertView == null) {                 holder = new ViewHolder();                 convertView = mInflater.inflate(R.layout.item, null);                 holder.imageView = (ImageView) convertView                         .findViewById(R.id.imageView);                 holder.textView = (TextView) convertView                         .findViewById(R.id.textViewId);                 holder.button = (Button) convertView.findViewById(R.id.button);                 holder.textView.setText("shit");                 holder.button.setOnClickListener(new View.OnClickListener() {                     @Override                     public void onClick(View v) {                         AlertDialog.Builder builder = new AlertDialog.Builder(                                 Audition1.this);                         builder.setMessage("dialog");                         builder.setTitle("title");                         builder.create();                         builder.show();                     }                 });                 convertView.setTag(holder);             } else {                 convertView.getTag();             }             return convertView;         }     }

}

<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>

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>

原因是button强制获取了item的焦点,只要设置button的focusable为false即可。