【发布时间】:2017-03-16 16:27:16
【问题描述】:
我知道已经有人问过类似的问题,但是似乎没有关于更新列表视图的明确答案。
我正在尝试使用 arrayadapter 通过异步任务更新 UI 中的 Listview。
我尝试将值添加到适配器,但是,虽然没有给出错误,但它似乎不起作用,因为列表视图仍然是空的。
如果我直接在适配器中输入数组,它可以工作。但我想通过 asynctask 来实现这一点,以备将来开发。
不确定是应该通过下面的进度更新还是在 PostExecute 中完成。
这里是代码。
public class MainActivity extends AppCompatActivity {
ListView myList;
ArrayAdapter adapter;
private String[] names = {"Test1","Test2","Test3","Test4","Test5"};
//MAIN METHOD TO START PROGRAM
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
myList.setAdapter(adapter);
new MyTask().execute();
}
class MyTask extends AsyncTask<Void, String, String> {
ArrayAdapter<String> adapter;
@Override
protected void onPreExecute() {
System.out.println("PreExecute Method Triggered");
adapter = (ArrayAdapter<String>)myList.getAdapter();
}
@Override
protected String doInBackground(String... params) {
for (String Name : names)
{
publishProgress(Name);
}
return "Values added";
}
@Override
protected void onProgressUpdate(String... values) {
adapter.add(values[0]);
System.out.println("OnProgress Method Triggered = " + values[0]);
}
@Override
protected void onPostExecute(String result) {
System.out.println("PostExecute Method Triggered" + result);
}
}
}
这是我的 acivity_main.xml 中的列表视图
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_bg" />
【问题讨论】:
标签: listview android-asynctask android-arrayadapter