我有一个带有自定义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上获取此行为的过程是什么?应该采用标准或“最接受”的方式。
答案 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);
}