我想在android中实现Listview
,我可以在其中启用删除模式,用户可以在其中选择要删除的条目。它应该类似于android中的消息应用程序。
我已经有一个ListActivity
左侧有一个图标,右侧有文字。我现在想在列表条目的右侧添加一个CheckBox
浮动。 ListActivity
在我的一位朋友的另一个问题中列出:android listactivity background color。
布局应该是:
我怎样才能做到这一点?我可以使用的框架中是否有标准的ListView
项?
答案 0 :(得分:1)
我想您希望在CheckBox
删除项目的时候(仅)显示ListView
。假设您使用其他问题的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:background="@color/darkbluelogo" >
<ImageView android:id="@+id/list_image"
android:layout_width="48dip"
android:layout_height="48dip"
android:contentDescription="@id/list_image"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:padding="5dp"
android:background="@color/darkbluelogo"
android:scrollingCache="false"
android:cacheColorHint="#00000000" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@+id/title" >
</TextView>
<TextView
android:id="@+id/datetime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@+id/datetime" >
</TextView>
</LinearLayout>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
当ListView
开始时,CheckBox
将不会出现,内容TextViews
将占用所有空间。在适配器的getView
方法中添加一个标记,表示必须显示CheckBox
(此处您将CheckBox
的可见性从布局设置为可见)。当删除项目的时间修改标记然后调用notifyDataSetChanged()
以便ListView
重新绘制其子项时,这次会出现CheckBox
。
注意:
您必须自己存储CheckBoxes
的状态。
答案 1 :(得分:0)
首先,您需要为列表条目设置自定义布局。一个简单的RelativeLayout包括ImageView,TextView和CheckBox就足够了。
然后你可能想要构建自己的自定义适配器,它可以扩展BaseAdapter(或SimpleAdapter或CursorAdapter或ArrayAdapter或......)。适配器将列表的数据绑定到您的自定义布局。例如,如果您的数据包含在Cursor中,它将如下所示:
private class MyCustomAdapter extends CursorAdapter {
public MyCustomAdapter(Context context) {
super(context, null);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
//Return a list item view
return getLayoutInflater().inflate(R.layout.my_custom_list_item_layout, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//Get views from layout
final ImageView imageView = (ImageView) view.findViewById(R.id.list_item_image);
final TextView textView = (TextView) view.findViewById(R.id.list_item_text);
final CheckBox checkBox = (CheckBox) view.findViewById(R.id.list_item_checkbox);
//Get data from cursor
final String text = cursor.getString(...);
//Add listener to the checkbox
checkBox.setOnClickListener(new OnClickListener() {...});
//Bind data
textView.setText(text);
}
}