访问ListView的每一行内的视图

时间:2012-09-24 15:05:38

标签: android android-listview togglebutton onclicklistener

我有ListViewListView的每一行都有ImageView,2 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>

5 个答案:

答案 0 :(得分:2)

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

ListView parent是父视图,View view是您实际点击的视图,其中包含您需要的子视图

答案 1 :(得分:0)

在您的示例中,parent是列表视图,而view是在ListView中单击的视图。您可以使用view或(来自android的文档):如果子类需要访问与所选项相关联的数据,则可以调用getListView()。getItemAtPosition(position)。

答案 2 :(得分:0)

一种方法是可以在自定义适配器类中定义侦听器

第二种方式是

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

答案 3 :(得分: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();
    }
}

试试; - )

答案 4 :(得分:0)

我建议实际将onClickListener设置为适配器的getView()中视图的背景。通过这样做,您可以访问convertView,它在列表视图滚动时被回收,并可以根据您的状态进行修改。

此外,请确保在设置视图标记后设置它,以便它不会回收您的侦听器并给您带来奇怪的错误。 =)