0

Je veux ajouter mon listview en utilisant arrayadapter, im utilisant actuellement simpleadapter. la raison pour laquelle je veux changer mon adaptateur est que je peux utiliser la méthode notifyDataSetChanged(), alors quelqu'un peut-il me montrer comment faire cela en utilisant mes codes ci-dessous? Je voudrais vraiment l'apprécierajouter des éléments à listview en utilisant 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

lorsque vos données sont rechargées à partir du serveur ou lorsque vous modifiez ces données à ce moment-là. d'abord télécharger des données ou modifier des données. 2ème appel - adapter.notifiydatastatechange(). –

+0

Vous devriez appeler la fonction 'ListAdapter.this.notifyDataSetChanged()' de l'adaptateur dans la liste. – GrIsHu

+0

@Grishu j'utilise cette méthode et je la passe en dessous de setListAdapter (adaptateur); mais toujours pas de chance, eclipse ne reconnaît pas la méthode notifyDataSetChanged(); dans mon simpleadapter. – jun

Répondre

1

notifyDataSetChanged() est une méthode de BaseAdapter, la classe parente de SimpleAdapter et ArrayAdapter. SimpleAdapter et ArrayAdapter sont différents principalement en ce qui concerne les données fournies à AdapterView. Alors qu'un SimpleAdapter est sauvegardé par des données XML, un ArrayAdapter est soutenu par un tableau de données arbitraires. En d'autres termes, il n'est pas nécessaire de changer le type d'adaptateur. Maintenant, la documentation indique qu'un SimpleAdapter est "un adaptateur facile pour mapper statique données aux vues" qui est discuté plus en détail par exemple. here. Mais le fait est que SimpleAdapter fonctionne aussi avec des données dynamiques. Si vous souhaitez toujours basculer vers un ArrayAdapter, vous devez remplacer la méthode getView() de ArrayAdapter car un ArrayAdapter ne prend en charge qu'un seul TextView par ligne (contrairement au SimpleAdapter qui prend en charge le mappage de plusieurs valeurs sur plusieurs Views pour un seul rangée). Il existe de nombreux tutoriels sur ArrayAdapter là-bas, par ex. celui-ci: http://www.vogella.com/articles/AndroidListView/article.html#adapterown_example.

+0

jeez c'est une douleur dans le cul, je veux juste utiliser la méthode notifyDataSetChanged() je ne peux pas le faire fonctionner dans mes codes, mon but est d'actualiser automatiquement ma listview chaque fois qu'il y a de nouvelles données dans mon flux . – jun

+0

Comment et où votre application est-elle notifiée des modifications apportées au flux de données? –

+0

im en utilisant cette application comme un rssfeed, c'est ce que je veux faire pour être notifié/actualiser ma listview quand il y a de nouvelles données à recevoir, parce que quand je veux rafraîchir mon application, je ferme habituellement et ouvre mon application – jun

Questions connexes