我有一个自定义列表视图,其中有4个文本视图,显示标题,日期,一些内容,最后一个用作未读指示器,因为当我单击列表项时,它会打开一个新活动并显示与之相关的其他内容单击的列表项。未读指示器textview正常工作正常,但是当我通过长时间单击从列表视图中删除列表项时,现在占据较高位置的下一个列表项使其已读指示器处于与已删除列表项相同的状态,尽管已单击它或不。我搜索了很多论坛,但找不到解决方案。我将附加这些图像以及我的自定义适配器代码,以帮助您更好地了解问题并获取解决方案。
图片链接:
下面的链接中包含所有未读列表项的图像
下面的链接具有单击时会读取第一列表项的图像
下面的链接中有一个图像,长按该图像会显示删除选项
下面的链接具有即使未单击也读取新的第一列表项的图像
公共类newsList_CustomAdapter扩展了ArrayAdapter {
List<newsList_DataModel> NewsListItem;
Context context;
static class ViewHolder{
TextView textView_readStatus;
TextView textView_newsHeader;
TextView textView_newsDate;
TextView textView_newsContent;
}
public newsList_CustomAdapter(Context context, int resource, List<newsList_DataModel> newsItem){
super(context, resource, newsItem);
this.NewsListItem = newsItem;
this.context = context;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent){
final newsList_DataModel newsList = getItem(position);
ViewHolder holder = null;
if (convertView == null){
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.custom_news_list,null);
holder = new ViewHolder();
holder.textView_newsHeader = convertView.findViewById(R.id.custom_newsList_textView_News_header);
holder.textView_newsDate = convertView.findViewById(R.id.custom_newsList_textView_News_date);
holder.textView_newsContent = convertView.findViewById(R.id.custom_newsList_textView_News_preview);
holder.textView_readStatus = convertView.findViewById(R.id.custom_newsList_textView_read_status);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView_newsHeader.setText(newsList.newsList_header);
holder.textView_newsDate.setText(newsList.newsList_date);
holder.textView_newsContent.setText(Html.fromHtml(newsList.newsList_content));
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
removeNewsItem(position);
return true;
}
});
final ViewHolder finalHolder = holder;
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MainActivity_DetailedNewsView.class );
intent.putExtra("ClickedItemTitle",newsList.newsList_header);
context.startActivity(intent);
finalHolder.textView_readStatus.setBackgroundResource(R.drawable.rounded_textview_read_status_read);
}
});
return convertView;
}
private void removeNewsItem(final int position){
AlertDialog.Builder builder = new AlertDialog.Builder(getContext(),R.style.MyDialogTheme);
builder.setTitle("Select Action");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
NewsListItem.remove(position);
//notifyDataSetChanged();
notifyDataSetChanged();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
在删除列表项之后,已删除列表项的未读状态将应用于现在已经上升的新列表项