notifyDataSetChanged() 動態更新ListView

來源:互聯網
上載者:User

有時候我們需要修改已經產生的列表,添加或者修改資料,notifyDataSetChanged()可以在修改適配器綁定的數組後,不用重新重新整理Activity,通知Activity更新ListView。今天的例子就是通過Handler AsyncTask兩種方式來動態更新ListView.從今天起,每次學習的原始碼都會打包上傳,方便各位同學學習,註冊帳號即可下載。
布局main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><ListView  android:id="@+id/lv"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    /></LinearLayout>

ListView列表布局playlist.xml:

<?xml version="1.0" encoding="utf-8"?><TextView   android:id="@+id/text1"  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="30px"  android:textSize="18sp"></TextView>

程式碼:

import java.util.ArrayList;    import android.app.Activity;  import android.os.AsyncTask;  import android.os.Bundle;  import android.os.Handler;  import android.view.View;  import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener;   public class main extends Activity {     /** Called when the activity is first created. */     ListView lv;     ArrayAdapter<String> Adapter;     ArrayList<String> arr=new ArrayList<String>();     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         lv=(ListView)findViewById(R.id.lv);         arr.add("123");         arr.add("234");         arr.add("345");         Adapter = new ArrayAdapter<String>(this,R.layout.playlist, arr);         lv.setAdapter(Adapter);         lv.setOnItemClickListener(lvLis);          editItem edit= new editItem();         edit.execute("0","第1項");//把第一項內容改為"第一項"         Handler handler=new Handler();         handler.postDelayed(add,3000);//延遲3秒執行     }     Runnable add=new Runnable(){           @Override         public void run() {             // TODO Auto-generated method stub             arr.add("增加一項");//增加一項             Adapter.notifyDataSetChanged();             }            };     class editItem extends AsyncTask<String,Integer,String>{         @Override         protected String doInBackground(String... params) {                 arr.set(Integer.parseInt(params[0]),params[1]);                 //params得到的是一個數組,params[0]在這裡是"0",params[1]是"第1項"                 //Adapter.notifyDataSetChanged();                 //執行添加後不能調用 Adapter.notifyDataSetChanged()更新UI,因為與UI不是同線程                 //下面的onPostExecute方法會在doBackground執行後由UI線程調用             return null;             }           @Override         protected void onPostExecute(String result) {             // TODO Auto-generated method stub             super.onPostExecute(result);             Adapter.notifyDataSetChanged();             //執行完畢,更新UI         }       }     private OnItemClickListener lvLis=new OnItemClickListener(){         @Override         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                 long arg3) {             //點擊條目時觸發             //arg2即為點中項的位置             setTitle(String.valueOf(arr.get(arg2)));           }       };   }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.