Android資料展示之ListView

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   os   ar   使用   

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() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubString 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"},newint[]{R.id.itemTitle,R.id.itemText});listView.setAdapter(simpleAdapter);
 BaseAdapter實現ListView

BaseAdapter可擴充性,可以再View中加入自己定義的一些操作事件,使用的時候需要實現BaseAdapter類,定義一個自己的類;

 

class MyBaseAdapter extends BaseAdapter {// 定義List的長度@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 100;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 30;}@Overridepublic 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;

 

  效果如下:

 

 

十一點了,該睡覺了,程式員還是不要熬夜的比較好~

Android資料展示之ListView

聯繫我們

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