2015-01-26 33 views
-1

我正在开发一个Android应用程序,它将RSS数据从给定的URL下载到ListView,我可以用多种方式(按字母顺序,按日期,按标题等)对项目进行排序。 。从Android上的ListView中删除特定项目

我希望能够删除从给定URL下载的所有项目。 排序改变了原来的项目位置,所以我不能简单地按位置移除项目。

下面我详细解释它是如何工作的:

  1. 在碎片中的我在其中键入网址,一个EditText。
  2. 一旦你按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); 
    } 
} 

感谢您的帮助提前。

+0

从你的数据集中删除它们,然后在适配器上的“notifyDatasetChanged”刷新列表 – tyczj 2015-01-26 19:16:25

+0

问题在于你如何在URL和下载列表项目之间建立关联。如果它像你说的那么简单,我就不会在这里发布。 – 2015-01-26 19:19:05

+2

理想情况下,您将拥有一个自定义对象,其中包含所有信息以及URL,因为您的列表人口取决于一个URL并基于此删除它,但由于您没有给出关于如何设置列表的任何代码,所以没有真正的信息可以提供 – tyczj 2015-01-26 19:22:23

回答

0

如果您Article对象(或RSS,或Channel)可以容纳许多URL S变量,可以实现类似下面协会(Article作为例子)

public class URL { 
    private String url; 
    private ArrayList<String> articleTitles; 

    public class URL(){ 
     this.articleTitles = new ArrayList<String>(); 
    } 

    public void setArticleTitles(String articleTitle){ 
     this.articleTitle.add(articleTitle); 
    } 

    public ArrayList<String> getAarticleTitles(){ 
     return this.articleTitles; 
    } 

    URL(String url) { 
     this.url = url; 
    } 
    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String title) { 
     this.url = title; 
    } 
} 

那么你将有你的URL参考你的对象。当您删除URL时,将从各自的adapter中删除所有Articles,最后在adapter上调用notifyDataSetChanged();

+0

您的回答引导我走向正确的解决方案。我设法将URL字符串添加到每个Article对象。谢谢。 – 2015-01-26 21:39:31

+0

很高兴帮助:-) @ M.Underhill – Marcus 2015-01-26 21:40:22