Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android開發之路08(ListView&Adapter),androidlistview

android開發之路08(ListView&Adapter),androidlistview

編輯:關於android開發

android開發之路08(ListView&Adapter),androidlistview


ListView控件介紹:用於將數據庫中的數據或者網絡中的數據通過列表的形式顯示出來;ListView采用MVC模式將前端顯示和後端數據進行分離。 也就是說,ListView控件在裝載數據時並不是直接使用ListView.add或者類似的方法添加數據,而是需要指定一個Adapter對象。該對象相當於MVC模式中的C(控制器),ListView相當於MVC模式中的V(視圖),用於顯示數據。為ListView提供數據的List或數組相當於MVC模式中的M(模型)在ListView控件中通過Adapter對象獲得需要顯示的數據,在創Adapter對象時需要指定要顯示的數據(List或數組對象),因此,要顯示的數據與ListView之間通過Adapter對象進行連接,同時又互相獨立,也就是說,ListView只知道顯示的數據來自Adapter,並不知道這些數據是來自List還是數組。

1.ListView應用實例(這裡是在java代碼中操作listview對象的):

public class MyListActivity extends ListActivity{

//定義一個字符串數組,代表我們的數據源

private  static final String[] COUNTRIES=new String[]{"中國","法國","美國","德國","日本","朝鮮","印度"};

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//把我們需要展現的數據展現到ListView上

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,COUNTRIES));

//通過getListView()方法獲取listview對象

ListView lv=getListView();

lv.setTextFilterEnabled(true);

Log.e("MyListActivity", "listview界面產生了");

lv.setOnItemClickListener(new OnItemClickListener() {

 

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

//通過getText()方法獲取用戶選擇的ListView中的選項信息

Log.e("MyListActivity", "列表選項被點擊了,看看會出現什麼");

Toast.makeText(getApplicationContext(), ((TextView)view).getText(), Toast.LENGTH_LONG).show();

}

 

});

}

}

列表項xml文件如下:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:padding="10dp"

    android:textSize="16sp">

</TextView>

 

Java代碼①:

public class MyActivity extends Activity{

private ListView listview;

private ArrayAdapter<String> adapter;

//定義一個數據源

private List<String> data=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//獲取數據源

data=MyDataSource.getDataSource();

adapter=new ArrayAdapter<String>(this, R.layout.list_item, data);

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

//將數據源通過adapter顯示到listview視圖上

listview.setAdapter(adapter);

 

 

}

}

Java代碼②:

 

public class MyDataSource {

 

public MyDataSource() {

super();

}

 

public static List<String> getDataSource(){

List<String> list=new ArrayList<String>();

list.add("北京");

list.add("上海");

list.add("廣州");

list.add("湖北");

list.add("湖南");

list.add("深圳");

list.add("西安");

 

return list;

 

}

 

}

 

布局文件activity_main.xml代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

    <ListView

        android:id="@+id/listview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:text="@string/hello_world" />

 

</RelativeLayout>

 

列表項list_item.xml代碼:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:padding="10dp"

    android:textSize="16sp">

</TextView>

 

2.ListView應用實例:

在上面的兩個例子中我們用的都是ArrayAdapter(數組適配器),這個適配器顯示的數據源比較單一;而SimpleAdapter能定義各種各樣的布局出來,可以放上ImageView(圖片),還可以放上Button(按鈕),CheckBox(復選框)等; 

下面我們就來看看如何使用SimpleAdapter

①MainActivity.java

public class MainActivity extends Activity {

private ListView mListView;

private SimpleAdapter mSimpleAdapter=null;

private List<Map<String, Object>> data=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView=(ListView) findViewById(R.id.listview);

data=new ArrayList<Map<String,Object>>();

/**

 * setAdapter方法:

 * 第一個參數:是一個Context的對象;

 * 第二個參數:是一個集合,采用這樣的形式List<Map<String, Object>>,為什麼呢?

 * 這裡的List<E>用來存儲listview中的列表項,而List<E>集合中的每一個元素,又都有自己的特征

 * 因此我們通過用map集合代表list的元素的方式,完成了listview數據展示的多元化;

 * 第三個參數:是一個布局文件,用來展示listview的每個列表項的內容

 * 第四個參數:是我們List<Map<String, Object>>中Map<key,value>的key的數組表示;

 * 第五個參數:使我們List<Map<String, Object>>中Map<key,value>的value的數組表示;

 */

Map<String, Object> mMap1=new HashMap<String, Object>();

mMap1.put("title", "我是第一個功能");

mMap1.put("icon", R.drawable.ic_launcher);

Map<String, Object> mMap2=new HashMap<String, Object>();

mMap2.put("title", "我是第二個功能");

mMap2.put("icon", R.drawable.ic_launcher);

Map<String, Object> mMap3=new HashMap<String, Object>();

mMap3.put("title", "我是第三個功能");

mMap3.put("icon", R.drawable.ic_launcher);

data.add(mMap1);

data.add(mMap2);

data.add(mMap3);

mListView.setAdapter(new SimpleAdapter(this, data, R.layout.list_item,

new String[]{"title","icon"}, new int[]{R.id.tv,R.id.iv}));

}

}

 

②activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

    <ListView

        android:id="@+id/listview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>

 

</RelativeLayout>

③list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

<ImageView 

    android:id="@+id/iv"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"/>

<TextView 

    android:id="@+id/tv"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"/>

</LinearLayout>

 

3.自定義適配器:android界面中有時候需要顯示稍微復雜的界面時,就需要我們自己定義一個adapter,那麼就要繼承BaseAdapter。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved