2015-01-26 74 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