我有一个列表视图,它从一个arrayList中加载项目,问题出现在使用onLongClickItemListener
时 每当一个项目被长时间点击时,我会在该项目本身中显示一个隐藏的布局。因此,无论何时列表正在回收物品,隐藏的布局对于被回收的物品(应该不显示布局)都是可见的。onLongItemClick影响回收的视图
任何想法?我试图给列表中每个项目的对象本身添加一个标志,但没有运气,我能得到的最多的是让滚动时显示的每个项目的布局消失,但我想保留已打开的项目由用户保持可见。
这里是我当前的代码:
messageListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
LinearLayout ll = (LinearLayout) view.findViewById(R.id.hiddenLayout);
if (ll.getVisibility() == View.VISIBLE) {
ll.setVisibility(View.GONE);
msgs.get(position).setViewFlag(false);
msgAdapter.setMessages(msgs);
} else {
ll.setVisibility(View.VISIBLE);
msgs.get(position).setViewFlag(true);
msgAdapter.setMessages(msgs);
}
return true;
}
});
而这里的适配器的代码:
public class MessagesAdapter extends BaseAdapter {
private static int lastPos = -1;
private ArrayList<Message> messages;
private Context context;
public MessagesAdapter(ArrayList<Message> messages, Context context) {
this.messages = messages;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.message_list_row, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.title = (TextView) convertView.findViewById(R.id.msgTitle);
viewHolder.body = (TextView) convertView.findViewById(R.id.msgBody);
viewHolder.monthDate = (TextView) convertView.findViewById(R.id.monthDate);
viewHolder.dayDate = (TextView) convertView.findViewById(R.id.dayDate);
viewHolder.status = (ImageView) convertView.findViewById(R.id.statusIcon);
viewHolder.linearLayout = (LinearLayout) convertView.findViewById(R.id.hiddenLayout);
viewHolder.linearLayout.setVisibility(View.GONE);
convertView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
if (!(messages.get(position).isViewFlag()))
holder.linearLayout.setVisibility(View.GONE);
holder.title.setText(messages.get(position).getTitle());
holder.body.setText(messages.get(position).getBody());
switch (messages.get(position).getMessageType()) {
case READ:
holder.status.setBackgroundResource(R.drawable.yellowcircle);
break;
case UNREAD:
holder.status.setBackgroundResource(R.drawable.redcircle);
break;
}
lastPos = position;
return convertView;
}
@Override
public int getCount() {
return messages.size();
}
@Override
public Object getItem(int position) {
return messages.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
static class ViewHolder {
public TextView title;
public TextView body;
public TextView dayDate;
public TextView monthDate;
public ImageView status;
public TextView read;
public TextView unread;
public TextView remove;
public TextView reply;
public LinearLayout linearLayout;
}
public void setMessages(ArrayList<Message> msgs) {
this.messages = msgs;
}
}
你必须在'Message'类中添加一个布尔标志 – pskink