我知道已经提出了类似的问题,但似乎并不是更新列表视图的明确答案。
我正在尝试使用arrayadapter通过asynctask更新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 <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_bg" />
答案 0 :(得分:0)
您需要让适配器知道更新ListView
,因为基础数据已更改。您需要致电notifydatasetchanged
来执行此操作。请参阅ArrayAdapter
的{{3}}。
在adapter.notifydatasetchanged()
之后add
或onProgressUpdate()
中添加onPostExecute()
。