通过适配器从Aysntask更新Listview.add不工作

通过适配器从Aysntask更新Listview.add不工作,listview,android-asynctask,android-arrayadapter,Listview,Android Asynctask,Android Arrayadapter,我知道已经有人问过类似的问题,但是更新listview似乎没有明确的答案 我正在尝试使用arrayadapter通过asynctask更新UI中的Listview 我尝试将这些值添加到适配器中,但是,虽然没有给出错误,但由于列表视图仍然为空,因此它似乎不起作用 如果我直接在适配器中输入数组,它就会工作。但是我想通过一个异步任务来实现这一点,以便将来的开发 不确定是否应通过以下进度更新或在PostExecute中完成 这是代码 public class MainActivity extends A

我知道已经有人问过类似的问题,但是更新listview似乎没有明确的答案

我正在尝试使用arrayadapter通过asynctask更新UI中的Listview

我尝试将这些值添加到适配器中,但是,虽然没有给出错误,但由于列表视图仍然为空,因此它似乎不起作用

如果我直接在适配器中输入数组,它就会工作。但是我想通过一个异步任务来实现这一点,以便将来的开发

不确定是否应通过以下进度更新或在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);
        }
    }

}
public类MainActivity扩展了AppCompatActivity{
列表视图myList;
阵列适配器;
私有字符串[]名称={“Test1”、“Test2”、“Test3”、“Test4”、“Test5”};
//启动程序的主要方法
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList=(ListView)findViewById(R.id.ListView);
adapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,new ArrayList());
myList.setAdapter(适配器);
新建MyTask().execute();
}
类MyTask扩展了AsyncTask{
阵列适配器;
@凌驾
受保护的void onPreExecute(){
System.out.println(“触发的预执行方法”);
适配器=(ArrayAdapter)myList.getAdapter();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
for(字符串名称:名称)
{
出版进度(名称);
}            
返回“添加的值”;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
adapter.add(值[0]);
System.out.println(“OnProgress Method Triggered=“+value[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
System.out.println(“触发后执行方法”+结果);
}
}
}
这是我的acivity_main.xml中的列表视图

  <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/gradient_bg" />

您需要让适配器知道更新
列表视图,因为基础数据已更改。您需要调用
notifydatasetchanged
来执行此操作。有关
阵列适配器的信息,请参见


onProgressUpdate()
onPostExecute()
中添加
adapter.notifydatasetchanged()。我错过了最后一个命令,但也发现了另一行,这是混乱我的代码。我对这个有个想法;使用相同的方法刷新屏幕。这就是在填充listview之后清除它。