在ListView中只选择一个项目

时间:2013-10-06 11:59:30

标签: android

我有一个带有自定义BaseAdapter的ListView,它可以显示总线编号,来源和目的地。单击一行时,我希望原点和目标消失并显示两个按钮。我通过适配器上的clicklisteners完成了这项工作,但我需要它一次显示一个项目上的两个按钮(当选择不同的行时隐藏它们)。

这很像Android的Twitter应用程序。我尝试使用MultiChoiceModeListener来做这件事,虽然我觉得它不是我想要的。

这是适配器的getView()方法上的clickListener的代码

busLabel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LinearLayout parent = (LinearLayout) (v.getParent());
            parent.findViewById(R.id.bus_selector).setVisibility(View.GONE);
            parent.findViewById(R.id.bus_description).setVisibility(View.VISIBLE);
        }
    });

布局的XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/bus_label"
        android:orientation="vertical"
        android:layout_height="@dimen/busline_height"
        android:layout_width="@dimen/busline_width">

        <TextView
            android:id="@+id/bus_number"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:singleLine="true"
            android:textSize="26sp"
            android:textStyle="bold"
            android:textColor="@color/regularbusfg"
            android:background="@color/regularbusbg"
            android:gravity="center" />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/bus_description"
        android:visibility="visible"
        android:orientation="vertical"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1">

        <TextView
            android:id="@+id/bus_origin"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:singleLine="true"
            android:textSize="18sp"
            android:textColor="@android:color/black"
            android:ellipsize="end"
            android:gravity="center_vertical" />

        <TextView
            android:id="@+id/bus_destination"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:singleLine="true"
            android:textSize="18sp"
            android:textColor="@android:color/black"
            android:ellipsize="end"
            android:gravity="center_vertical" />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/bus_selector"
        android:visibility="gone"
        android:background="@drawable/border"
        android:textColor="@color/darkgreyfg"
        android:orientation="horizontal"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1">

        <TextView
            android:id="@+id/bus_going"
            android:text="@string/going"
            android:textAllCaps="true"
            android:textStyle="bold"
            android:layout_height="fill_parent"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:singleLine="true"
            android:textSize="22sp"
            android:ellipsize="end"
            android:gravity="center" />

        <View
            android:layout_width="1dp"
            android:layout_height="fill_parent"
            android:background="#DBDBDB"/>

        <TextView
            android:id="@+id/bus_coming"
            android:text="@string/coming"
            android:textAllCaps="true"
            android:textStyle="bold"
            android:layout_height="fill_parent"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:singleLine="true"
            android:textSize="22sp"
            android:ellipsize="end"
            android:gravity="center" />

    </LinearLayout>


</LinearLayout>

我来自Web开发,之前我需要的是查找所选类的元素,将其删除并将类应用于新元素。在Android上获取此行为的过程是什么?应该采用标准或“最接受”的方式。

1 个答案:

答案 0 :(得分:7)

您可以做的最简单的事情是保存用户点击的最后一个View,如果用户点击另一个项目,您可以更改您保存的最后一个视图的可见性。

busLabel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             if (mLastView != null)
                 deselect(mLastView);
             select(v);
             mLastView = v;
        }
    });

private void select(View v) {
    LinearLayout parent = (LinearLayout) (v.getParent());
    parent.findViewById(R.id.bus_selector).setVisibility(View.GONE);
    parent.findViewById(R.id.bus_description).setVisibility(View.VISIBLE);
}

private void deselect(View v) {
    LinearLayout parent = (LinearLayout) (v.getParent());
    parent.findViewById(R.id.bus_selector).setVisibility(View.VISIBLE);
    parent.findViewById(R.id.bus_description).setVisibility(View.GONE);
}