2011-01-24 6 views
1

newView()およびbindView()をオーバーライドするカスタムCursorAdapterを使用して、カスタムListViewを表示しています。カスタムCursorAdapterを使用してリストビューの行をクリック可能にする

Iは、行レイアウトXMLファイルを膨張及びbindView(に引数として渡された図)にOnClickListenerを結合しています:

<?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> 
:私はまた、行XMLで相対レイアウトを使用してい

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

私の問題は、リスト内の項目をクリックしても何も起こらず、OnClickListener.onClick()が呼び出されないことです。

問題の原因が考えられますか?

ありがとうございます。

答えて

4

RelativeLayoutdescendantFocusability="blockDescendantsを使用しました。

TextViewがフォーカスを取得できないため、List行がフォーカスを取得し、onItemClickListenerに応答できるため、これが機能すると思います。誰もが、私はその答えを受け入れるだろう私よりもこの優れたを説明することができた場合は

私はHow to fire onListItemClick in Listactivity with buttons in list?

のコメントからこれを得ました。

+0

良い仕事をして動作しません! –

1

OnClickListenerを自分の行に設定する代わりに、ListViewsetOnItemClickListener(OnItemClickListener)を使用してください。

+0

私は 'getListView()を使用。setOnItemClickListener(新OnItemClickListener(){'私のonCreateで()まだ..感謝を – simao

0

私はあなたがする必要があることがわかった:あなたは(たとえば、私はimPlay、llFirstHalf、llSecondHalf、およびcbCheckでこれを置く)カスタム列ビューでクリック可能にしたい各項目の

android:focusable="false" 

を。そのビュー内でクリック可能にしたい領域の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; 
    } 

} 
関連する問題