0

アクティビティは1つですが、レイアウトは3つです。ListViewは、ログイン後に表示されるレイアウトの一部です。そのため、ListViewがまだ初期化されていないため、ArrayAdapterをonCreateに設定できません。このチュートリアルに従ってみましたが、これらの手順を再現できませんでした。このチュートリアルでは、作成者はすべてonCreateを実行しました。

私はそれをこのようにしてみました:

ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;

...

    public class getcontacts extends AsyncTask<Void, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Void... params) {

 ...HERE I AM FETCHING DATA...

 listItems.add(json_data.getString("login") + " " + derp);
 }

@Override
    protected void onPostExecute(final Boolean success) {
        getc = null;


        ac = new addcontacts();
        ac.execute(true);

そして、これがaddcontactsクラスのコードです。

 public class addcontacts extends ListActivity {


     protected void onCreate() {


         adapter=new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,
                    listItems);
         setListAdapter(adapter);

         adapter.notifyDataSetChanged();

     }
     protected void execute(final Boolean success) {

    done = true;
     }


 }

そしてレイアウト:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >



<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="188dp"
    android:layout_weight="0.53"
    android:text="Fetching contact list" />

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="106dp" >
</ListView>

</LinearLayout>

ListViewには何も含まれていません。listItemsにすべてのアイテムがあることをデバッガーでチェックしたので、アダプターに問題があります。

4

1 に答える 1

1

次のアプローチをお勧めします。

  1. Activityクラスの初期化ListViewで、Adapter空のリストを使用します。
  2. のサブクラスを作成BaseAdapterして、より詳細に制御します。
  3. のコンストラクターを介してパスAdapterとリストを作成しAdapterます。
  4. パスAdapterListAsyncTaskサブクラスに入れます。
  5. メソッドで、doInBackground()サーバーからデータをフェッチし、各アイテムをに追加しますList
  6. Lazy-Adapterを作成して、各アイテムをに追加するList場合は、を呼び出し publishProgress()onProgressUpdate()メソッドを呼び出します yourAdapter.notifyDataSetChanged()
  7. そうでない場合は、作業が完了した後、onPostExecute()メソッド呼び出し でyourAdapter.notifyDataSetChanged()
  8. これで動作するはずです。

これで完了です。

于 2013-02-18T18:50:45.763 に答える