尝试使用Listview
设置简单的ArrayAdapter
。但是,无法在输出中看到任何列表。
以下是代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Parse.initialize(this, "key", "key");
setContentView(R.layout.activity_big_board);
countryLocal = new ArrayList<String>();
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Country");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> CountryList, ParseException e) {
if (e == null) {
for(int i=0;i<CountryList.size();i++)
{
temp = CountryList.get(i).getString("Name");
countryLocal.add(temp);
Log.d("OUT", "So the Val::------> " + countryLocal);
}
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
ArrayAdapter<String> namesArrayAdapter =new ArrayAdapter<String>(this,R.layout.user_list_item, countryLocal);
ListView usersListView = (ListView)findViewById(R.id.usersListView);
usersListView.setAdapter(namesArrayAdapter);
}
Logcat
似乎没有错误,但是当我从云加载数据时,是否需要等待或从其他线程加载某些内容?或者我错过了什么?
答案 0 :(得分:1)
由于查询是异步执行的,因此在您创建并设置适配器之后,可能会填充countryLocal
ArrayList。
如果在调用usersListView.setAdapter(...)
时列表为空,则adapter.getItemCount()
将返回0并且ListView将不显示任何内容。
您有责任让ListView知道数据集何时发生变化,以便它可以重新查询适配器。
您可以通过在适配器上使用notifyDataSetChanged
来执行此操作 - 这使得在适配器上订阅的任何人都知道数据集已更改。
为了允许您这样做,您可以在开始查询之前声明并创建ArrayAdapter,这样您就可以在知道查询完成时使用引用来调用notifyDataSetChanged()
。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Parse.initialize(this, "key", "key");
setContentView(R.layout.activity_big_board);
countryLocal = new ArrayList<String>();
final BaseAdapter namesArrayAdapter = new ArrayAdapter<String>(this, R.layout.user_list_item, countryLocal);
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Country");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> CountryList, ParseException e) {
if (e != null) {
Log.d("score", "Error: " + e.getMessage());
return;
}
for (int i = 0; i < CountryList.size(); i++) {
temp = CountryList.get(i).getString("Name");
countryLocal.add(temp);
Log.d("OUT", "So the Val::------> " + countryLocal);
}
namesArrayAdapter.notifyDataSetChanged();
}
});
ListView usersListView = (ListView) findViewById(R.id.usersListView);
usersListView.setAdapter(namesArrayAdapter);
}