【问题标题】:adding items to listview using arrayadapter使用 arrayadapter 将项目添加到列表视图
【发布时间】:2013-02-23 04:29:07
【问题描述】:

我想使用 arrayadapter 添加填充我的列表视图,我目前使用的是 simpleadapter。我想改变我的适配器的原因是我可以使用方法 notifyDataSetChanged(), 那么谁能告诉我如何使用下面的代码来做到这一点?我会很感激的

 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);
        }
    });

}
  }

【问题讨论】:

  • 当您的数据从服务器重新加载或您当时更改该数据时。首先下载数据或更改数据。第二次调用——adapter.notifydatastatechange()。
  • 你应该在列表中调用适配器的ListAdapter.this.notifyDataSetChanged()函数。
  • @Grishu 我使用该方法并将其粘贴在 setListAdapter(adapter);但仍然没有运气,eclipse 无法识别方法 notifyDataSetChanged();在我的简单适配器中。

标签: android listview android-arrayadapter domparser notifydatasetchanged


【解决方案1】:

notifyDataSetChanged() 是一个BaseAdapter 方法,是SimpleAdapter 和ArrayAdapter 的父类。 SimpleAdapter 和 ArrayAdapter 的区别主要在于提供给 AdapterView 的数据。 SimpleAdapter 由 XML 数据支持,而 ArrayAdapter 由任意数据数组支持。 换句话说,无需更改适配器的类型。

现在文档指出 SimpleAdapter 是“将 static 数据映射到视图的简单适配器”,对此进行了更详细的讨论,例如here。但事实上,SimpleAdapter 也适用于动态数据。

如果您仍想切换到 ArrayAdapter,那么您必须覆盖 ArrayAdapter 的 getView() 方法,因为 ArrayAdapter 仅支持每行单个 TextView(与支持将多个值映射到单行的多个 View 的 SimpleAdapter 不同)。 那里有很多关于 ArrayAdapter 的教程,例如这个: http://www.vogella.com/articles/AndroidListView/article.html#adapterown_example.

【讨论】:

  • 天哪,这真是让人头疼,我只想使用 notifyDataSetChanged() 方法,我无法在我的代码中使用它,我的目标只是在任何时候自动刷新我的列表视图是我提要中的新数据。
  • 您的应用如何以及在何处收到有关数据馈送更改的通知?
  • 我像 rssfeed 一样使用这个应用程序,这就是我想要在收到新数据时收到通知/刷新我的列表视图的操作,因为当我想刷新我的应用程序时,我通常会关闭并打开我的应用程序..
  • 一个非常简单的解决方案是创建一个新的适配器并在 ListView 上调用 setAdapter。我的猜测是,读取提要是一项昂贵的操作,而创建新适配器相对便宜(当然取决于更新的频率)。
  • 你能告诉我如何在我的代码中做到这一点吗?我承认我是菜鸟,T_T
猜你喜欢
  • 2015-07-12
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多