0

私にはがありListView、の各行にはListViewImageView2つのTextViewビュー、および1つのビューがありますToggleButton

行内のビュー(例ToggleButton)にアクセスするにはどうすればよいですか?

を使ってみましたOnClickListenerが、うまくいかず、理由がわかりません。以下は私が試したことです:

 @Override
 public void onListItemClick(ListView parent, View view, int position, long id){
    ToggleButton tb2 = (ToggleButton)parent.findViewById(R.id.star);
    if(tb2.isChecked()){
    Toast.makeText(MainActivity.this, "TOOGLE BUTTON TEST", Toast.LENGTH_LONG).show();
    }
}

私の行のレイアウト:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/list_selector_background"
    android:clickable="true"
    android:gravity="fill_horizontal"
    android:longClickable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingBottom="8dip"
    android:paddingTop="5dip" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="10dp"
        android:scaleType="fitXY"
        android:src="@drawable/contact_user" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_weight="1"
        android:gravity="fill"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/nameClient"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff" />
        <TextView
            android:id="@+id/accountClient"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#483ca0" />
    </LinearLayout>

    <ToggleButton
        android:id="@+id/star"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/list_star_selector"
        android:clickable="true"
        android:enabled="true"
        android:inputType="none"
        android:textOff=""
        android:textOn="" />

</TableRow>
4

5 に答える 5

2

試す

ToggleButton tb2 = (ToggleButton)view.findViewById(R.id.star);

ListView parentは親ビューでView viewあり、実際にクリックしたビューであり、必要なサブビューが含まれています

于 2012-09-24T15:09:55.453 に答える
0

実際にonClickListenerをアダプタのgetView()のビューの背景に設定することをお勧めします。これを行うことにより、リストビューがスクロールするときにリサイクルされるconvertViewにアクセスし、状態に応じて変更することができます。

また、ビューのタグを設定した後で設定して、リスナーがリサイクルされたり、奇妙なバグが発生したりしないようにしてください。=)

于 2012-09-24T15:47:02.720 に答える
0

この例でparentは、はリストビューでありview、はListView内でクリックされたビューです。または(Androidのドキュメントから)を使用できますview。サブクラスは、選択したアイテムに関連付けられたデータにアクセスする必要がある場合、getListView()。getItemAtPosition(position)を呼び出すことができます。

于 2012-09-24T15:18:34.467 に答える
0

1つの方法は、カスタムアダプタクラスでリスナーを定義できることです。

2番目の方法は

ToggleButton button =(ToggleButton)view.findViewBtId(R.id.star);

于 2012-09-24T15:25:42.047 に答える
0
public void onListItemClick(ListView parent, View view, int position, long id){
    ToggleButton tb2 = (ToggleButton)view.findViewById(R.id.star);
    if(tb2.isChecked()){
        Toast.makeText(MainActivity.this, "I clicked the ToggleButton on row " + position, Toast.LENGTH_LONG).show();
    }
}

それを試してください;-)

于 2012-09-24T15:26:14.477 に答える