Android ArrayAdapter和ListView
我有一段代码,它必须获取一个listview并用数组适配器填充它:Android ArrayAdapter和ListView,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我有一段代码,它必须获取一个listview并用数组适配器填充它: public class news extends ListActivity { public String[] titoli = new String[99]; public String[] descrizioni = new String[99]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns
public class news extends ListActivity {
public String[] titoli = new String[99];
public String[] descrizioni = new String[99];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new connection().execute();
System.out.println("prova1");
}
public class connection extends AsyncTask<Void, Void, Void> {
public Void doInBackground(Void... params) {
System.out.println("prova2");
// All static variables
final String URL = "http://www.messedaglia.it/index.php/archivio-news?format=feed&type=rss";
// XML node keys
final String ITEM = "item"; // parent node
final String TITLE = "title";
final String DESC = "description";
Element e = null;
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(TITLE, parser.getValue(e, TITLE));
map.put(DESC, parser.getValue(e, DESC));
// adding HashList to ArrayList
menuItems.add(map);
}
System.out.println("prova3");
for (int c = 0; c < nl.getLength(); c++) {
e = (Element) nl.item(c);
titoli[c] = parser.getValue(e, TITLE); // name child value
descrizioni[c] = parser.getValue(e, DESC);
}
return null;
}
public void onPostExecute() {
System.out.println("prova4");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(news.this,
android.R.layout.simple_list_item_1, titoli);
System.out.println("prova5");
ListView listView = (ListView) news.this
.findViewById(android.R.id.list);
listView.setAdapter(adapter);
}
}
}
日志:
大多数人都说要添加setContentView()。我删除了它,因为添加它时会出现以下错误:
错误:java.lang.RuntimeException:您的内容必须具有id属性为“android.R.id.list”的ListView
这是因为未在组件上设置布局。首先需要调用
setContentView(R.layout.my\u great\u layout)
,然后才有意义调用findViewById
确保布局中有一个带有android.R.id.listid的ListView
:
<ListView
android:id="@android:id/list"
.....
这是因为未在组件上设置布局。首先需要调用setContentView(R.layout.my\u great\u layout)
,然后才有意义调用findViewById
确保布局中有一个带有android.R.id.list
id的ListView
:
<ListView
android:id="@android:id/list"
.....
无法设置主布局
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); <----------------here
new connection().execute();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, titoli);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);无法设置主布局
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); <----------------here
new connection().execute();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, titoli);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);如日志中所示:
NullPointerException 02-07 13:38:36.020:E/AndroidRuntime(13803):
位于com.messedagliavr.messeapp.news.onCreate(news.java:33)
因为titoli
数组为空。您正在使用AsyncTask获取titoli
数组中的元素,然后只需移动适配器代码onPostExecute
方法
和使用
ListView listView = (ListView) findViewById(android.R.id.list);
而不是
ListView listView = (ListView) findViewById(R.id.list);
若要获取ListView
引用,必须在xml布局中将ListView id声明为android:id=“@android:id/list”
,如果您在日志中使用:
NullPointerException 02-07 13:38:36.020:E/AndroidRuntime(13803):
位于com.messedagliavr.messeapp.news.onCreate(news.java:33)
因为titoli
数组为空。您正在使用AsyncTask获取titoli
数组中的元素,然后只需移动适配器代码onPostExecute
方法
和使用
ListView listView = (ListView) findViewById(android.R.id.list);
而不是
ListView listView = (ListView) findViewById(R.id.list);
若要获取ListView
引用,并且必须在xml布局中将ListView id声明为android:id=“@android:id/list”
,如果您正在使用,findViewById是否正常工作?ListView变量似乎为null。setContentView()函数在哪里?您正在尝试在setContentView()之前查找视图方法调用。@Francesco Ambrosini带有ListView
-ArrayAdapter
的简单示例。请尝试按照这个方法进行操作。下面是在调用“super.onCreate”后添加“setContentView”的示例。我移动了setContentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView,它的id属性与findViewById一致工作?ListView变量似乎为null。您在哪里设置ContentView()函数?您正在尝试在setContentView()方法调用之前查找视图。@Francesco Ambrosini使用ListView
-ArrayAdapter
的简单示例。请尝试按照此操作。以下是在调用“super.onCreate”之后添加“setContentView”。我移动了setContentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。如果将titioli变量初始化为新字符串[99],它将如何为null甚至在构造函数运行之前?@AudriusMeškauskas在您扩展ListActivity时,不需要为ListActivity设置布局,也不需要使用setContentView(R.layout.main);如果您没有在布局上添加类似的内容?:public void onPostExecute(){ArrayAdapter=new ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,titoli);ListView ListView=(ListView)findViewById(android.R.id.list);ListView.setAdapter(adapter);}@FrancescoAmbrosini:像这样:public void onPostExecute(){ArrayAdapter=new ArrayAdapter(news.this,android.R.layout.simple_list_list_item,titoli);ListView=(ListView)news.this.findViewById(android.R.id.list);ListView.setAdapter(adapter);}
@FrancescoAmbrosini:使用代码在ListView中使用ArrayList添加项目如果将titioli变量初始化为新字符串,该变量可以为空[99]甚至在构造函数运行之前?@AudriusMeškauskas在您扩展ListActivity时,不需要为ListActivity设置布局,也不需要使用setContentView(R.layout.main);如果您没有在布局上添加类似的内容?:public void onPostExecute(){ArrayAdapter=new ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,titoli);ListView ListView=(ListView)findViewById(android.R.id.list);ListView.setAdapter(adapter);}@FrancescoAmbrosini:像这样:public void onPostExecute(){ArrayAdapter=new ArrayAdapter(news.this,android.R.layout.simple_list_list_item,titoli);ListView=(ListView)news.this.findViewById(android.R.id.list);ListView.setAdapter(adapter);}
@FrancescoAmbrosini:使用代码在ListView中使用ArrayList添加项目我移动了setCOntentView()在调用类news之前。我这样做是因为如果我不这样做,我会得到以下错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。我移动了setCOntentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。我在调用类news之前移动了setCOntentView()。我这样做是因为如果我没有得到这个错误:java.lan