安卓——ListView
阿新 • • 發佈:2019-01-01
上圖是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(); } }