1. 程式人生 > >安卓——ListView

安卓——ListView

 





上圖是SimpleAdapter的介面卡


上圖是ArrayAdapter的介面卡



上圖是OnItemClickListener點選效果


上圖我滑動了一下螢幕,滑動監聽器(OnScrollListener)中onScrollChanged()方法列印的日誌。


上圖是在onScrollChanged()方法新增的向下滑動更新資料來源的功能。必須加上simple_Adapter.notifyDataSetChanged()方法,通知UI執行緒更新資料來源。


以下是程式碼及註釋:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.lenovo.listview.MainActivity">


    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
</LinearLayout>

simpleadapter.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="match_parent"
    android:orientation="horizontal"
    >

    <ImageView
        android:layout_marginLeft="15dp"
        android:id="@+id/pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#000000"
        android:text="慕課網"
        />


</LinearLayout>

MainActivity.java

package com.example.lenovo.listview;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends Activity implements AdapterView.OnItemClickListener,AbsListView.OnScrollListener{
    private ListView lv;
    private ArrayAdapter<String> arr_adapter;
    private SimpleAdapter simple_Adapter;
    private List<Map<String,Object>> dataList;//SimpleAdapter中的資料來源
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listview);
        //1資料來源
        String data[]={"慕課網1","慕課網2","慕課網3","慕課網4"};
        //1.新建支配器
        //ArrayAdapter(上下文,當前ListView所載入的每一個列表項所對應的佈局檔案,資料來源)
        //2.介面卡載入資料來源
        arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        //3.檢視(ListView)載入介面卡
        //lv.setAdapter(arr_adapter);//載入ArrayAdapter介面卡

        /*
        SimpleAdapter()中的引數
        1.context:上下文
        2.data:資料來源(List<? extends Map<String.?>>)一個Map所組成的List集合
          每一個Map都會去對應列表中的一行
          每一個Map(鍵值對)中的鍵必須包含所有在from中指定的鍵
        3.resource:列表項的佈局檔案ID
        4.from:Map中的鍵名
        5.to:繫結資料檢視中的ID,與from成對應關係
        */
        dataList=new ArrayList<Map<String,Object>>();
        simple_Adapter=new SimpleAdapter(this,getData(),R.layout.simpleadapter,new String[]{"pic","text"},new int[]{R.id.pic,R.id.text});
       lv.setAdapter(simple_Adapter);//載入SimpleAdapter介面卡
        lv.setOnItemClickListener(this);//設定單個條目點選的監聽事件
        lv.setOnScrollListener(this);//設定滑動變化監聽的事件
    }

    //返回資料來源dataList
    private List<Map<String,Object>> getData(){

        for(int i=0;i<20;i++){
            Map<String,Object>map=new HashMap<String,Object>();
            map.put("pic",R.mipmap.ic_launcher);
            map.put("text","demo"+i);
            dataList.add(map);
        }
        return dataList;
    }

    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {
        switch (i)
        {
            case SCROLL_STATE_FLING:
                Log.i("Main","使用者在手指離開螢幕前,由於用力劃了一下,檢視仍以慣性向下滑動");
                Map<String,Object>map =new HashMap<String,Object>();
                map.put("pic",R.mipmap.ic_launcher);
                map.put("text","增加項");
                dataList.add(map);
                simple_Adapter.notifyDataSetChanged();//必須加上simple_Adapter.notifyDataSetChanged()方法,通知UI執行緒更新資料來源。
                break;
            case SCROLL_STATE_IDLE:
                Log.i("Main","檢視已經停止滑動");
                break;
            case SCROLL_STATE_TOUCH_SCROLL:
                Log.i("Main","手指沒有離開螢幕,仍然在滑動");
                break;
        }
    }

    @Override
    public void onScroll(AbsListView absListView, int i, int i1, int i2) {

    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        //i這個引數是ListView中元素的第幾個(從0開始)
        String text=lv.getItemAtPosition(i)+"";
        Toast.makeText(this,"postion="+i+"text="+text,Toast.LENGTH_SHORT).show();
    }
}