Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用arrayadapter向listview添加项_Android_Listview_Android Arrayadapter_Domparser_Notifydatasetchanged - Fatal编程技术网

Android 使用arrayadapter向listview添加项

Android 使用arrayadapter向listview添加项,android,listview,android-arrayadapter,domparser,notifydatasetchanged,Android,Listview,Android Arrayadapter,Domparser,Notifydatasetchanged,我想使用arrayadapter添加并填充我的listview,我目前使用的是simpleadapter。我想更改适配器的原因是为了使用notifyDataSetChanged()方法, 那么,有人能告诉我如何使用下面的代码吗?我会非常感激的 public class AndroidXMLParsingActivity extends ListActivity { // All static variables static final String URL = "https://news.

我想使用arrayadapter添加并填充我的listview,我目前使用的是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);
        }
    });

}
  }
公共类AndroidXMLParsingActivity扩展了ListActivity{
//所有静态变量
静态最终字符串URL=”https://news.instaforex.com/news";
//XML节点密钥
静态最终字符串KEY\u ITEM=“ITEM”//父节点
静态最终字符串键\u TITLE=“TITLE”;
静态最终字符串键\u PUBDATE=“PUBDATE”;
静态最终字符串键\u DESCRIPTION=“DESCRIPTION”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
最终ArrayList menuItems=新ArrayList();
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(URL);//获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(键项);
//循环通过所有项目节点
对于(int i=0;ivalue
put(KEY_TITLE,Html.fromHtml(parser.getValue(e,KEY_TITLE));
put(KEY_PUBDATE,Html.fromHtml(parser.getValue(e,KEY_PUBDATE));
put(KEY_DESCRIPTION,Html.fromHtml(parser.getValue(e,KEY_DESCRIPTION));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}
//向ListView添加菜单项
ListAdapter=new SimpleAdapter(此,菜单项,
R.layout.list_项目,
新字符串[]{KEY_TITLE,KEY_PUBDATE},新int[]{
R.id.name,R.id.cost});
setListAdapter(适配器);
//选择单个ListView项
ListView lv=getListView();
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
String title=menuItems.get(position).get(KEY_title).toString();
字符串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);
//开始新的意图
Intent in=新的Intent(getApplicationContext(),SingleMenuItemActivity.class);
in.putExtra(图例标题、标题);
in.putExtra(键为PUBDATE,PUBDATE);
in.putExtra(图例说明,说明);
星触觉(in);
}
});
}
}
notifyDataSetChanged()是一个BaseAdapter方法,是SimpleAdapter和ArrayAdapter的父类。SimpleAdapter和ArrayAdapter主要在提供给AdapterView的数据方面有所不同。SimpleAdapter由XML数据支持,而ArrayAdapter由任意数据数组支持。 换句话说,不需要更改适配器的类型

现在,文档说明SimpleAdapter是“一种将静态数据映射到视图的简单适配器”,我们将对此进行更详细的讨论,例如。但事实是SimpleAdapter也可以处理动态数据

如果仍要切换到ArrayAdapter,则必须覆盖ArrayAdapter的getView()方法,因为ArrayAdapter每行仅支持一个TextView(与SimpleAdapter不同,SimpleAdapter支持将多个值映射到一行的多个视图)。 有很多关于ArrayAdapter的教程,例如:
.

当您的数据从服务器重新加载时,或当您更改该数据时。首先下载数据或更改数据。第二次调用--adapter.NotifyDataStateChange()。您应该调用适配器的
ListAdapter.this.notifyDataSetChanged()
函数(位于列表上)。@Grishu我使用该方法并将其粘贴到setListAdapter(适配器)下面;但是仍然不走运,eclipse无法识别notifyDataSetChanged()方法;在我的simpleadapter.jeez中,这真是个麻烦事,我只想使用notifyDataSetChanged()方法,我的代码中无法使用它,我的目标只是在我的源中有新数据时自动刷新我的listview。你的应用程序如何以及在哪里通知数据源的更改?我像rssfeed一样使用这个应用程序,这就是我想要在收到新数据时得到通知/刷新我的listview的方法,因为当我想要刷新我的应用程序时,我通常会关闭并打开我的应用程序。一个非常简单的解决方案就是在listview上创建一个新适配器并调用setAdapter。我的猜测是,读取提要是一项昂贵的操作,而创建一个新的适配器相对便宜(当然取决于更新的频率)。你能在我的代码中告诉我怎么做吗??我承认我不在这里,是吗