gpt4 book ai didi

Android ListView重复修改列表项

转载 作者:行者123 更新时间:2023-11-30 02:55:36 24 4
gpt4 key购买 nike

我有一个包含一些列表项的 ListView。每个项目都有一个删除按钮,它会激活列表项顶部的另一层,以显示已删除的文本,如下所示在下面的代码中删除onClickListener

这些激活的 overlays 每隔一段时间就会重复一次(就像每 8 个列表项一样),所以我猜 android 正在以某种方式回收它们...我怎样才能使这个问题不再发生?

public View getView(int i, View view, ViewGroup viewGroup) {
final AnnouncementHolderItem holder;
final View finalView = view;
Item curr = getItem(i);
if(view == null){
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_item, null);
holder = new HolderItem(view);
view.setTag(holder);
} else {
holder = (HolderItem) view.getTag();
}
holder.title.setText(curr.getTitle());
holder.course.setText(curr.getName());
holder.marker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(activity, "Item starred!", Toast.LENGTH_SHORT).show();
}
});
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((LinearLayout) finalView.findViewById(R.id.bottomLayer)).setVisibility(View.INVISIBLE);
LinearLayout delete = (LinearLayout)finalView.findViewById(R.id.deleteLayer);
delete.setVisibility(View.VISIBLE);
}
});
holder.undelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Reverse of the delete + a toast message
}
});
return finalView;
}

列表项是一个FrameLayout,删除的层在上面(默认不可见),下面是关于项目的信息。

最佳答案

您完全正确: ListView 是回收 View 。您需要一些方法来跟踪哪些项目已在 ListView 的控制之外被“删除”。在您的情况下,听起来一个简单的数组就可以解决问题。

下面是我用来做同样事情的代码示例。在本例中,它是一个复选框,所有复选框最初都未选中。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.dialog_checkbox_item, null);
holder = new ViewHolder();
holder.checkbox = (CheckBox)convertView.findViewById(R.id.dialog_checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
if (checkedArray[position] == true)
holder.checkbox.setChecked(true);
else
holder.checkbox.setChecked(false);
}
holder.checkbox.setText((CharSequence) mData.get(position));
return convertView;
}

关于Android ListView重复修改列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23324202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com