Android資料展示之ListView

來源:互聯網
上載者:User

Android資料展示之ListView
Android應用程式中經常需要使用ListView展示資料,一個ListView通常將資料填充到布局檔案中,在填充的過程中需要知道串連資料與ListView的適配器。適配器是一個串連資料和AdapterView(ListView是一個典型的AdapterView)的橋樑,通過它能有效地實現資料與AdapterView的分離設定,使AdapterView與資料的綁定更加簡便,修改更加方便。常用的適配器有三種ArrayAdapter,SimpleAdapter和BaseAdapter。 ArrayAdapter實現ListView 用ArrayAdapter可以實現簡單的ListView的資料繫結。預設情況下,ArrayAdapter綁定每個對象的toString值到layout中預先定義的TextView控制項上。ArrayAdapter的使用非常簡單。 在布局檔案中新增一個ListView  <ListView    android:id="@+id/list_Test"    android:layout_width="match_parent"    android:layout_height="wrap_content" /> activity中代碼的實現,擷取ListView沒什麼好說的,主要是setAdapter方法,第二個參數就是Android系統中內建布局檔案,如果是android.R.layout.simple_list_item_1,就直接是一行文字,我只列舉了三個,其他的可以自行測試: String[] listArrStrings=new String[]{"星期一","星期二","星期三"};listView=(ListView) findViewById(R.id.list_Test); listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice, listArrStrings));listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  listView.setOnItemClickListener(new OnItemClickListener() {     @Override    public void onItemClick(AdapterView<?> parent, View view,            int position, long id) {        // TODO Auto-generated method stub        String nameString=(String) parent.getItemAtPosition(position);        setTitle("今天是:"+nameString);                       } 實現結果如下:    重新改變一下代碼,改變一下填充的預設的系統的布局檔案,可以設定單選還是多選:  listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);         listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 效果如下:     SimpleAdapter實現ListView      ListView中每個View布局都一樣,這個時候需要首先建立一個布局檔案simpleitem.xml  <?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="wrap_content"    android:orientation="horizontal" >     <ImageView        android:id="@+id/itemImage"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:src="@drawable/ic_launcher" />     <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:paddingLeft="10dp">         <TextView            android:id="@+id/itemTitle"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="標題"            android:textSize="25sp" />         <TextView            android:id="@+id/itemText"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="xxxxxxxxx" />    </LinearLayout> </LinearLayout>  這個時候代碼調用也很簡單,跟ArrayAdapter類似,SimpleAdapter,最後兩個參數,一個是map中的鍵,一個對應的simpleitem中的id:  ListView listView=(ListView) findViewById(R.id.list_simple);    ArrayList<HashMap<String, String>> arrayList=new ArrayList<HashMap<String,String>>();    for (int i = 0; i <10; i++) {        HashMap<String, String> map=new HashMap<String, String>();        map.put("itemTitle", "標題"+i);        map.put("itemText", "內容"+i);        arrayList.add(map);    }         SimpleAdapter simpleAdapter=new SimpleAdapter(this, arrayList, R.layout.simpleitem, new String[]{"itemTitle","itemText"},new            int[]{R.id.itemTitle,R.id.itemText});    listView.setAdapter(simpleAdapter); BaseAdapter實現ListView BaseAdapter可擴充性,可以再View中加入自己定義的一些操作事件,使用的時候需要實現BaseAdapter類,定義一個自己的類;  class MyBaseAdapter extends BaseAdapter {     // 定義List的長度    @Override    public int getCount() {        // TODO Auto-generated method stub        return 100;    }     @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return null;    }     @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return 30;    }     @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub         TextView textView = new TextView(BaseActivity.this);         textView.setText("測試");         textView.setTextColor(Color.BLUE);         textView.setTextSize(20);         return textView;         }}    Activity中調用代碼:  ListView listView = (ListView) findViewById(R.id.list_base);        listView.setAdapter(new MyBaseAdapter());   上面其實用BaseAdapter實現了ArrayAdapter的功能,同樣的可以使用BaseAdapter實現SimpleAdapter的功能: 還是同樣的調用simplte這個布局,重寫一下getView()方法:  View view = null;        if (convertView == null) {            LayoutInflater inflater = BaseActivity.this.getLayoutInflater();            view = inflater.inflate(R.layout.simpleitem, null);        }else{            view=convertView;        }        TextView tvTitleTextView=(TextView) view.findViewById(R.id.itemTitle);        TextView tvTextView=(TextView) view.findViewById(R.id.itemText);        tvTitleTextView.setTextSize(20);        tvTitleTextView.setText("標題---"+position);        tvTitleTextView.setTextColor(Color.RED);        tvTextView.setTextSize(15);        tvTextView.setText("內容----"+position);        return view;  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.