3

ListViewをAsyncTaskで埋める必要があります。このコードは機能し、TextViewは「Begin」、「End」の順に変わります。ただし、ListViewは空白であり、表示されていません。ログに「array=3」と表示されます。

package a.test3;

import java.util.ArrayList;

import a.test3.MainActivity;
import a.test3.R;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

    GrabURL mt;
    TextView textView;
    ListView lvMain;
    ArrayList<String> result_arr = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = new TextView(this);
        lvMain = (ListView) findViewById(R.id.listView1);

        mt = new GrabURL();
        mt.execute();
    }

    public class GrabURL extends AsyncTask<Void, Void, ArrayList<String>> {             
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            textView.setText("Begin");
            setContentView(textView);
        }

        @Override
        protected ArrayList<String> doInBackground(Void... params) {
            result_arr.add("a");
            result_arr.add("b");
            result_arr.add("c");
            return result_arr;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result) {
            super.onPostExecute(result);

            Log.d("info", "array = " + result.size());

            textView.setText("End");
            setContentView(textView);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                    android.R.layout.simple_list_item_1, result);
            lvMain.setAdapter(adapter);
        }
    }
}

教えてください、私は何が間違っているのですか?

4

2 に答える 2

3

あなたのコードを見てください

        textView.setText("End");
        setContentView(textView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_1, result_arr);
        lvMain.setAdapter(adapter);

アクティビティの表示(レイアウト)を設定します。ここではTextViewのみを表示しますsetContentView(textView);ListView lvMain;TextViewをアクティビティのContentViewとして設定する場合、ContentViewには何もありません。

この行を削除します

setContentView(textView);

それでも機能しない場合は、

textView.invalidate();
于 2012-10-24T10:40:06.870 に答える
0

Adapter.notifyDataSetChanged()への呼び出しがありません。コードは次のようになります

@Override
protected void onPostExecute(ArrayList<String> result) {
    ...
    lvMain.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}
于 2012-10-24T11:01:25.020 に答える