ListView詳解(一)之ArrayAdapter的使用


  1、Listview簡述

A view that shows items in a vertically scrolling list. The items come from theListAdapter associated with this view.

簡單來說就是,創建Listview,然后給數值就行了。

而這些數值來源有三種方式:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter

 

第一種是最簡單的一種Adapter,是字符串數值,只能在ListView顯示出文本信息。

第二種是一種自定義的數據來源,要自定義布局方式,可以放置圖片,按鈕,文本之類的。

第三種數據來源於數據庫。

 

2、使用ListView步驟

  • 將數據填充到布局之ArrayAdapter的使用

布局文件加入ListView控件:

<ListView

  android:id="@+id/lv"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  />

 

主程序:

MyListView.java

package com.ycz.mylistview;

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

public class MyListView extends Activity{

  private static final String[] str=new String[]{"first","second","third","fourth","fifth"};

  @Override

  public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    lv=(ListView)findViewById(R.id.lv);

    //綁定ArrayAdapter適配器

    lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str));

      }

     }

 

  第一個參數表示上下文,第二個參數表示一個包含TextView,用來填充listView的每一行的布局資源ID,第三個參數為ListView的內容。

  通過指定第二個參數來實現不同的顯示效果,資源android.R.layout.simple_list_item_1來實現僅顯示內容,無勾選。資源android.R.layout_simpel_list_item_checked實現帶選擇框的ListView,需要用setChoiceMode()設定選擇為多選還是單選。資源android.R.layout.simple_list_item_multiple_choice實現帶checkbox的ListView,需要用setChoiceMode()設定選擇為多選還是單選。資源android.R.layout.simple_list_item_

  single_choice實現帶RadioButton的ListView,需要用setChoiceMode()設定為多選還是單選。

  示例一 

  

lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,str));

  lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

 

  //實現帶選擇框的ListView,並設置為多選

  示例二

  

lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,str));

  lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

 

  //實現帶CheckBox的ListView,並設置為多選

  示例三

 

 lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_

  single_choice,str));

  lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

 

  

  •   處理用戶操作之onItemClick()方法的使用

  

  通過調用setOnItemClickListener()接口方法,設置“點擊”listview某一項的監聽事件。

  通過調用setOnItemLongClickListener()接口方法,設置“長按”listview某一項的監聽事件。

  

  [java] view plain copy print ?
mylistview.setOnItemClickListener(new OnItemClickListener() {  
  
      @Override  
         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  
          // TODO Auto-generated method stub                    }  
      });  

    mylistview.setOnItemClickListener(new OnItemClickListener() {

       @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
        
      }
    });

 

    關於onItemClick方法,下面詳細說說。(以下是官方的說明,參數命名不同而已,類型都是一樣的。arg0=parent,arg1=view,arg2=position,arg3=id)

 

    public abstract void onItemClick(AdapterView<?> parent,View view, int position, long id)

  Since: API Level 1

  Callback method to be invoked when an item in this AdapterView has been clicked.

  Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.

  //當點擊listview某一項時,這個回調方法就會被調用。

  Parameters
parent The AdapterView where the click happened.
view The view within the AdapterView that was clicked (this will be a view provided by the adapter)
position The position of the view in the adapter.
id The row id of the item that was clicked.

 

  主要說說最后三個參數,

  view——————是你點擊的Listview的某一項的內容,來源於adapter。如用((TextView)arg1).getText(),可以取出點擊的這一項的內容,轉為string類型。

  position————是item在adapter的位置,如點擊了listview第2項,而第2項對應的是adapter的第2個數值,那此時position的值就為1了。

  id———————id的值為點擊了Listview的哪一項對應的數值,點擊了listview第2項,那id就等於1。

  注:這些數值都是從0開始的。

  需要說明的是,當設置匿名內部類new OnItemClickListener()時,eclipse不會自動載入復寫函數,要點擊左邊的錯誤提示,然后Add unimplemented methods,才能載入復寫函數onItemClick()。

 

package com.conowen.listview;  
1.import android.app.Activity;  
2.import android.os.Bundle;  
3.import android.view.View;  
4.import android.widget.AdapterView;  
5.import android.widget.AdapterView.OnItemClickListener;  
6.import android.widget.AdapterView.OnItemLongClickListener;  
7.import android.widget.ArrayAdapter;  
8.import android.widget.ListView;  
9.import android.widget.TextView;  
10.import android.widget.Toast;  
11.public class ListviewActivity extends Activity {  
12./** Called when the activity is first created. */  
13.@Override  
14.public void onCreate(Bundle savedInstanceState) {  
15.super.onCreate(savedInstanceState);  
16.        setContentView(R.layout.main);  
17.        ListView lv = (ListView) findViewById(R.id.lv);  
18.        String[] data = { "windows", "linux", "ios", "android", "wp7",  
19."Symbian" };// 定義adapter  
20.        lv.setAdapter(new ArrayAdapter<String>(this,// 把adapter綁定到listview里面  
21.                android.R.layout.simple_expandable_list_item_1, data));  
22.// 點擊事件  
23.        lv.setOnItemClickListener(new OnItemClickListener() {  
24.@Override  
25.public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
26.long arg3) {  
27.// TODO Auto-generated method stub  
28.                Toast.makeText(ListviewActivity.this, "你點擊的是第" + arg3 + "項",  
29.                        Toast.LENGTH_SHORT).show();  
30.// 取出所點擊的那一項的id  
31.            }  
32.        });  
33.// 長按事件  
34.        lv.setOnItemLongClickListener(new OnItemLongClickListener() {  
35.@Override  
36.public boolean onItemLongClick(AdapterView<?> arg0, View arg1,  
37.int arg2, long arg3) {  
38.// TODO Auto-generated method stub  
39.                Toast.makeText(ListviewActivity.this,  
40.                        ((TextView) arg1).getText(), Toast.LENGTH_LONG).show();  
41.// 取出點擊listview某一項的內容  
42.return false;  
43.            }  
44.        });  
45.    }  
46.}  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM