做“删除布局”的最佳方法是什么?

时间:2012-06-16 16:33:16

标签: android android-layout

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

这是最好的方法吗?添加更多细节:

以下是仅包含消息的捕获。

enter image description here

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

enter image description here

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

2 个答案:

答案 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中使用两个布局(这不是您的情况)。要实现这两种布局,您必须使用方法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()