0

我想添加使用arrayadapter填充我的listview,即時通訊使用simpleadapter。我想更改我的適配器的原因是,我可以使用方法notifyDataSetChanged(), 所以任何人都可以告訴我如何使用下面的代碼做到這一點?我真的很感激它使用arrayadapter將項添加到列表視圖

public class AndroidXMLParsingActivity extends ListActivity { 

// All static variables 
static final String URL = "https://news.instaforex.com/news"; 


// XML node keys 
static final String KEY_ITEM = "item"; // parent node 
static final String KEY_TITLE = "title"; 
static final String KEY_PUBDATE = "pubDate"; 
static final String KEY_DESCRIPTION = "description"; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ArrayList<HashMap<String, Spanned>> menuItems = new ArrayList<HashMap<String, Spanned>>(); 

    XMLParser parser = new XMLParser(); 
    String xml = parser.getXmlFromUrl(URL); // getting XML 
    Document doc = parser.getDomElement(xml); // getting DOM element 

    NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
    // looping through all item nodes <item> 
    for (int i = 0; i < nl.getLength(); i++) { 
     // creating new HashMap 
     HashMap<String, Spanned> map = new HashMap<String, Spanned>(); 
     Element e = (Element) nl.item(i); 
     // adding each child node to HashMap key => value 
     map.put(KEY_TITLE, Html.fromHtml(parser.getValue(e, KEY_TITLE))); 
     map.put(KEY_PUBDATE, Html.fromHtml(parser.getValue(e, KEY_PUBDATE))); 
     map.put(KEY_DESCRIPTION, Html.fromHtml(parser.getValue(e, KEY_DESCRIPTION))); 

     // adding HashList to ArrayList 
     menuItems.add(map); 

    } 

    // Adding menuItems to ListView 

    ListAdapter adapter = new SimpleAdapter(this, menuItems, 
      R.layout.list_item, 
      new String[] { KEY_TITLE, KEY_PUBDATE }, new int[] { 
        R.id.name, R.id.cost }); 

    setListAdapter(adapter); 

    // selecting single ListView item 
    ListView lv = getListView(); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      String title = menuItems.get(position).get(KEY_TITLE).toString(); 
      String pubDate = menuItems.get(position).get(KEY_PUBDATE).toString(); 
     String description= menuItems.get(position).get(KEY_DESCRIPTION).toString(); 

    System.out.println("PubDate==>"+pubDate+"\n Description===>"+description); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
      in.putExtra(KEY_TITLE, title); 
      in.putExtra(KEY_PUBDATE, pubDate); 
      in.putExtra(KEY_DESCRIPTION, description); 
      startActivity(in); 
     } 
    }); 

} 
    } 
+0

當您的數據從服務器重新加載或當您在那時更改該數據。首先下載數據或更改數據。第二次調用 - adapter.notifiydatastatechange()。 – 2013-02-23 04:55:24

+0

你應該在列表上調用Adapter的'ListAdapter.this.notifyDataSetChanged()'函數。 – GrIsHu 2013-02-23 04:55:39

+0

@Grishu我使用該方法並在setListAdapter(adapter)下面貼上它;但仍然沒有運氣,日食不承認方法notifyDataSetChanged();在我的簡單適配器中。 – jun 2013-02-23 05:11:58

回答

1

notifyDataSetChanged()是一個BaseAdapter方法,SimpleAdapter和ArrayAdapter的父類。 SimpleAdapter和ArrayAdapter主要與提供給AdapterView的數據不同。雖然SimpleAdapter由XML數據支持,但ArrayAdapter由一組任意數據支持。 換句話說,不需要改變適配器的類型。

現在文檔指出SimpleAdapter是「一個簡單的適配器,用於將靜態數據映射到視圖」,這將更詳細地討論。 here。但事實是SimpleAdapter也適用於動態數據。

如果您仍然想切換到ArrayAdapter,那麼您必須重寫ArrayAdapter的getView()方法,因爲ArrayAdapter每行只支持一個TextView(與支持將多個值映射到多個Views的SimpleAdapter相同行)。 有很多關於ArrayAdapter的教程,例如:這一個: http://www.vogella.com/articles/AndroidListView/article.html#adapterown_example

+0

jeez這是在屁股這樣的痛苦,我只是想使用notifyDataSetChanged()方法,我不能讓它在我的代碼工作,我的目標是隻要我的飼料中有新的數據自動刷新我的列表視圖。 – jun 2013-02-23 05:17:47

+0

您的應用如何以及在哪裏通知了數據饋送的更改? – 2013-02-23 05:40:01

+0

即時通訊這樣的應用程序就像一個rssfeed,這就是我想做的事情,當有新的數據被接收時,我想要做的事情是要通知/刷新我的列表視圖,因爲當我想刷新我的應用程序時,我通常關閉並打開我的應用程序。 – jun 2013-02-23 05:52:30