0

我有一个应用程序,它有一个显示消息日志的活动。问题是用户必须能够选择一些消息然后删除它们,就像你想删除一些短信一样。

最好的方法是什么?添加更多细节:

这是仅包含消息的捕获。

在此处输入图像描述

这是带有选择布局的捕获。

在此处输入图像描述

我想知道他们是如何展示的CheckBoxes。他们使用了两种布局吗?

4

2 回答 2

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
     }
     //...
}

然后,当需要显示这些CheckBoxesButton单击、菜单单击等)时,您只需将标志设置为checkStatus所需的值(当前,否则)并调用您的适配器。trueCheckBoxesfalsenotifyDataSetChanged()

当然,您可以使用两种布局,一种包含 ,CheckBox另一种不包含。ListView但是,通常,当两个布局非常(或实质性)不同(这不是您的情况)时,您会使用两种布局。要实现这两种布局,您必须使用方法getItemViewTypegetViewTypeCount.

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()您的适配器。

于 2012-06-17T06:22:54.713 回答
0

如果您使用 listView 和适配器,我的猜测是适配器包含消息的(纯 java)列表。因此,当用户删除一个项目时,根据项目在列表中的位置将其从列表中删除。

紧接着,调用notifyDataSetChanged适配器。而已 。

于 2012-06-16T20:24:04.813 回答