我正在开发一个Android应用程序,它将RSS数据从给定的URL下载到ListView,我可以用多种方式(按字母顺序,按日期,按标题等)对项目进行排序。 。从Android上的ListView中删除特定项目
我希望能够删除从给定URL下载的所有项目。 排序改变了原来的项目位置,所以我不能简单地按位置移除项目。
下面我详细解释它是如何工作的:
- 在碎片中的我在其中键入网址,一个EditText。
- 一旦你按ENTER键:
- 的URL是通过对B片段的界面,它使用的URL通过“项”级类型的ArrayAdapter下载XML数据并加载“项目” S到它的ListView传递。
- 片段A具有它自己的ListView,它在其中存储接受的URL并在其旁边删除<按钮。
说的加载到片段'S B ListView的每个RSS项目具有独特的标题,链接和描述,发布日期。
这意味着在加载的项目中没有共同的值。 我下载了“channel”部分,它是从给定URL下载的所有“item”的父项,但我没有在片段的B适配器中使用它。
下面是POJO代码:
@Root(name = "rss", strict = false)
public class RSS {
@Element
private Channel channel;
@Attribute
private String version;
public Channel getChannel() {
return channel;
}
}
@Root(name = "channel", strict = false)
public class Channel {
@ElementList(name = "item", inline = true)
List<Article> articleList;
@Element
private String title;
@Element
private String link;
@Element
private String description;
// setters and getters
}
@Root(name = "item", strict = false)
public class Article {
@Element
private String title;
@Element
private String description;
@Element
private String link;
@Element(required = false)
private String author;
@Element(required = false)
private String pubDate;
// setters and getters
}
这是用于存储片段A的ListView的适配器的网址URL类。
public class URL {
private String url;
URL(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public void setUrl(String title) {
this.url = title;
}
}
现在,B片段下载RSS对象(称为“文章”在这里),这是我如何加载项其他的ListView适配器:
previewList = articles.getChannel().articleList;
adapter.addTop(previewList);
adapter.notifyDataSetChanged();
最后,片段B的ListView控件适配器:
public class ArticlePreviewAdapter extends ArrayAdapter<Article> {
List<Article> articlePreviewItems;
public ArticlePreviewAdapter(Activity activity, List<Article> articlePreviewItems) {
super(activity, R.layout.item_article_preview, articlePreviewItems);
this.articlePreviewItems = articlePreviewItems;
}
private static class ViewHolder {
TextView articlePreviewTitle;
TextView articlePreviewLink;
TextView articlePreviewDescription;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
Article articlePreviewItem = getItem(position);
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.item_article_preview, parent, false);
viewHolder.articlePreviewTitle = (TextView) convertView.findViewById(R.id.articleTitle);
viewHolder.articlePreviewLink = (TextView) convertView.findViewById(R.id.articleLink);
viewHolder.articlePreviewDescription = (TextView) convertView.findViewById(R.id.articleDescription);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.articlePreviewTitle.setText(articlePreviewItem.getTitle());
viewHolder.articlePreviewLink.setText(articlePreviewItem.getLink());
viewHolder.articlePreviewDescription.setText(articlePreviewItem.getDescription());
return convertView;
}
public void removeChannelItems(what do) {
what do?
}
public void addTop(List<Article> articles) {
articlePreviewItems.addAll(0, articles);
}
}
感谢您的帮助提前。
从你的数据集中删除它们,然后在适配器上的“notifyDatasetChanged”刷新列表 – tyczj 2015-01-26 19:16:25
问题在于你如何在URL和下载列表项目之间建立关联。如果它像你说的那么简单,我就不会在这里发布。 – 2015-01-26 19:19:05
理想情况下,您将拥有一个自定义对象,其中包含所有信息以及URL,因为您的列表人口取决于一个URL并基于此删除它,但由于您没有给出关于如何设置列表的任何代码,所以没有真正的信息可以提供 – tyczj 2015-01-26 19:22:23