我有一個列表視圖,它從一個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