我正在開發一個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