我有一个应用程序,它有一个显示消息日志的活动。问题是用户必须能够选择一些消息然后删除它们,就像你想删除一些短信一样。
最好的方法是什么?添加更多细节:
这是仅包含消息的捕获。
这是带有选择布局的捕获。
我想知道他们是如何展示的CheckBoxes
。他们使用了两种布局吗?
我有一个应用程序,它有一个显示消息日志的活动。问题是用户必须能够选择一些消息然后删除它们,就像你想删除一些短信一样。
最好的方法是什么?添加更多细节:
这是仅包含消息的捕获。
这是带有选择布局的捕获。
我想知道他们是如何展示的CheckBoxes
。他们使用了两种布局吗?
我想知道他们是如何显示复选框的,他们使用 2 种布局吗?
我怀疑他们使用两个布局文件。由于行非常相似,因此很容易通过更改可见性从没有的布局切换到有的CheckBox
布局。CheckBox
一种方法是在您的适配器中有一个标志,指示行中存在并根据该标志CheckBox
更新可见性:CheckBox
boolean checkStatus = false;
//...
public void getView(int position, View convertView, ViewGroup parent) {
//...
if (checkStatus) {
checkBox.setVisibility(View.VISIBLE); //show the CheckBox for each row
} else {
checkBox.setVisibility(View.GONE); // hide the CheckBox for each row
}
//...
}
然后,当需要显示这些CheckBoxes
(Button
单击、菜单单击等)时,您只需将标志设置为checkStatus
所需的值(当前,否则)并调用您的适配器。true
CheckBoxes
false
notifyDataSetChanged()
当然,您可以使用两种布局,一种包含 ,CheckBox
另一种不包含。ListView
但是,通常,当两个布局非常(或实质性)不同(这不是您的情况)时,您会使用两种布局。要实现这两种布局,您必须使用方法getItemViewType
和getViewTypeCount
.
boolean checkStatus = false;
public int getViewTypeCount() {
return 2; // you have two layouts
}
public int getItemViewType(int position) {
if (checkStatus) {
return 1;
} else {
return 0;
}
}
然后在你的getView
方法中:
public void getView(int position, View convertView, ViewGroup parent) {
int which = getItemViewType(position)
// make a switch statement and inflate the correct layout file
// based on the which variable if the convertView is null
// do stuff;
}
当然,当需要显示时,CheckBoxes
您必须checkStatus
再次设置标志并调用notifyDataSetChanged()
您的适配器。
如果您使用 listView 和适配器,我的猜测是适配器包含消息的(纯 java)列表。因此,当用户删除一个项目时,根据项目在列表中的位置将其从列表中删除。
紧接着,调用notifyDataSetChanged
适配器。而已 。