簡體   English   中英

Android從JSON數組添加ListView項目

[英]Android Adding ListView items from JSON array

我有一個活動,但有3種布局。 ListView是登錄后顯示的布局的一部分。這就是為什么我無法將ArrayAdapter設置為onCreate的原因,因為ListView尚未初始化。 我嘗試按照教程進行操作,但是無法重現這些步驟。 在本教程中,作者在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具有所有項目,因此適配器存在問題。

我建議您采用以下方法:

  1. Activity類中,使用空列表初始化ListViewAdapter
  2. 創建BaseAdapter子類以BaseAdapter進行更多控制。
  3. 通過Adapter通過的構造和列表Adapter
  4. AsyncTask子類中傳遞AdapterList
  5. doInBackground()方法中,執行從Server提取數據並將每個項目添加到List
  6. 如果要創建Lazy-Adapter以便將每個項目添加到List ,請調用publishProgress()並在onProgressUpdate()方法中調用yourAdapter.notifyDataSetChanged()
  7. 如果沒有,則在完成工作后,在onPostExecute()方法中調用yourAdapter.notifyDataSetChanged()
  8. 現在應該可以了。

大功告成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM