0

我有一个带有自定义 BaseAdapter 的 ListView,它呈现总线号、起点和终点。单击一行时,我希望起点和终点消失并显示两个按钮。I have that done through clicklisteners on the adapter, but I need it to show the two buttons onle on one item at a time (hiding them when a different row is selected).

这很像 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 上获得这种行为的程序是什么?应该有一个标准或“最被接受”的方式来做到这一点。

4

1 回答 1

8

您可以做的最简单的事情是保存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);
}
于 2013-10-09T19:34:34.900 回答