调用notifyDataSetChanged后,Android ListView不会更新

Gee*_*Out 2 java android android-listview android-asynctask

我有一个活动,我这样开始:

public class MyProblemsActivity extends ListActivity 
{
    String[] PROBLEMS = new String[] {"One", "Two", "Three" };
    ArrayAdapter adapter;       

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        adapter = new ArrayAdapter<String>(this,R.layout.my_problems, PROBLEMS);

        setListAdapter(adapter);

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);
Run Code Online (Sandbox Code Playgroud)

这完全没问题.

我遇到的问题是在通过Asynch调用调用远程服务器后,我这样做:

    @Override
    protected void onPostExecute(String result) 
    {       
            PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };
            adapter.notifyDataSetChanged();
        }
Run Code Online (Sandbox Code Playgroud)

但屏幕不会更新.我在这里做错了什么,如何使用新值更新屏幕?

谢谢!!

Rah*_*arg 9

发生了什么事

PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };
Run Code Online (Sandbox Code Playgroud)

PROBLEMS是获得参考new字符串数组对象...因此旧参考剩余的,因为它是(不变)..

要纠正它,请使用以下内容:

PROBLEMS.clear();
List<String> newlist = new ArrayList<String>();
newlist.add(..);
..
PROBLEMS.addAll(newlist);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

这样,新字符串将仅添加到由PROBLEMS指出的现有数组引用中

注:我已经通过参考使用字符串的字符串,而不是[]的ArrayList中提到,要使用的明确()中的addAll()functionalites,你可以修改它的String [],按您的使用..