我的应用程序有一个显示消息日志的活动。问题是用户必须能够选择一些消息然后删除它们,就像你想要删除一些短消息一样。
这是最好的方法吗?添加更多细节:
以下是仅包含消息的捕获。
这是一个带有选择布局的捕获。
我想知道他们是如何做的,以显示CheckBoxes
。他们使用了两种布局吗?
答案 0 :(得分:0)
如果你使用listView和一个适配器,我的猜测是适配器包含一个(纯java)消息列表。因此,当用户删除某个项目时,请根据该项目在列表中的位置将其从列表中删除。
之后,在适配器上调用notifyDataSetChanged
。而已 。
答案 1 :(得分:0)
我想知道他们是如何做的,以显示复选框,他们是否使用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
标记设置为所需的值({{1} } {存在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()
。