2011-01-24 52 views
1

我正在使用自定义CursorAdapter来覆盖newView()和bindView()以显示自定义ListView。使用自定义CursorAdapter使ListView行可点击

我膨胀所述行布局xml文件和一个OnClickListener结合)作为参数传递给bindView(视图:

public void bindView(View view, Context context, Cursor cursor) { 
view.setOnClickListener(new OnClickListener() { } 
... 
} 

我还在行XML使用相对布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
     android:paddingTop="10px" 
    android:paddingBottom="10px" 
    android:paddingLeft="10px" 
    android:paddingRight="10px" 
    android:clickable="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    > 

    <TextView android:id="@+id/episode_title_text" xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
    android:textSize="20px" 
    android:layout_weight="1" 
    /> 

</RelativeLayout> 

我的问题是,当我点击列表中的项目,没有任何反应,OnClickListener.onClick()永远不会被调用。

关于问题可能是什么的任何想法?

谢谢。

回答

4

我在我的RelativeLayout中使用了descendantFocusability="blockDescendants,它工作正常。

我认为这是有效的,因为TextView无法获得焦点,因此List行获得焦点并可以响应onItemClickListener。

我在How to fire onListItemClick in Listactivity with buttons in list?

得到这个从注释如果有人能比我解释这更好,我会接受的答案。

+0

干得好,谢谢! – 2014-09-29 05:09:56

1

而不是将OnClickListener设置为您的行,请在您的ListView中使用setOnItemClickListener(OnItemClickListener)

+0

我用`getListView()。setOnItemClickListener(新OnItemClickListener(){`在我的onCreate(),但仍然无法正常工作.. – simao 2011-01-24 23:50:50

0

我发现,你需要做的:

android:focusable="false" 

您希望在您的自定义行视图点击每个项目(例如我把这个imPlay,llFirstHalf,llSecondHalf和cbCheck)。为您希望在该视图内点击的区域创建onClick监听器。我的例子在我的列表视图行视图中做了4个可点击的区域。

@Override 
public void bindView(View v, Context context, Cursor c) { 

    ImageView imPlay = (ImageView) v.findViewById(R.id.row_play_button); 
    LinearLayout llFirstHalf = (LinearLayout) v.findViewById(R.id.row_first_half); 
    LinearLayout llSecondHalf = (LinearLayout) v.findViewById(R.id.row_second_half); 
    CheckBox cbCheck = (CheckBox) v.findViewById(R.id.row_checkbox); 

    imPlay.setOnClickListener(this); 
    llFirstHalf.setOnClickListener(this); 
    llSecondHalf.setOnClickListener(this); 
    cbCheck.setOnClickListener(this); 



} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 

    case R.id.row_checkbox: 
     Log.e("ListAdapter onClick","checkbox"); 
     break; 
    case R.id.row_first_half: 
     Log.e("ListAdapter onClick","row first half"); 
     break; 
    case R.id.row_second_half: 
     Log.e("ListAdapter onClick","row second half"); 
     break; 
    case R.id.row_play_button: 
     Log.e("ListAdapter onClick","play button"); 
     break; 
    } 

} 
相关问题