文章目錄
-
- ListView
-
- ListView常用屬性
- ListView基本使用
- ListView動态插入資料
- ListView實作圖文混排
- Adapter
-
- Adapter(擴充卡種類)
- 自定義Adapter的使用
- Spinner下拉清單
- AutoCompleteTextView自動補全
ListView
ListView常用屬性
屬性 | 說明 |
---|---|
divider | 設定分割線的顔色 |
dividerHeight | 設定分割線的高度 |
Scrollbars | 設定滾動條的顯示或者隐藏 |
Fadescrollbars | 設定滾動條自動隐藏或者顯示 |
Entries | 引用一個将使用在此ListView裡的數組,若數組是固定的,使用此屬性将比在程式中寫入更為簡單 |
ListView基本使用
設定基礎屬性
<ListView
android:id="@+id/lv1"
android:divider="#FF00FF"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:entries="@array/names"
</ListView>
設定字元串數組
<string-array name="names">
<item>Tome</item>
<item>Andy</item>
<item>GuiShou</item>
<item>Jack</item>
<item>Andy</item>
<item>Niko</item>
</string-array>
效果如圖:
ListView動态插入資料
想要在ListView中動态插入資料,需要下面幾個步驟
- 在布局檔案中編寫代碼
- 在xml中添加ListView标簽
- 在Activity中編寫代碼
- 擷取ListView對象
- 準備資料源(Array數組)
- 配置擴充卡(ArrayAdapter)
- 将擴充卡關聯到ListView中
什麼是擴充卡
擴充卡是資料和視圖間的橋梁,它負責把資料所提供的内容顯示到視圖所定義的外觀中
示例代碼如下:
private void InitListView() {
//擷取界面對象
ListView listview=findViewById(R.id.lv1);
//準備資料源
String data[]={"上海","北京","廣州","武漢","三亞","成都","南昌","廈門","福建","海口","南昌"};
//建立擴充卡
ArrayAdapter<String> adaper=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,data);
//将擴充卡和ListView關聯
listview.setAdapter(adaper);
}
實際效果如圖:
ListView實作圖文混排
首先建立一個layout檔案,實作一個單一的ListView樣式,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_margin="6dp"
android:layout_height="match_parent">
<ImageView
android:id="@+id/logo"
android:layout_margin="5dp"
android:src="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/title"
android:text="王者榮耀"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/version"
android:text="版本:1.8.8"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/size"
android:text="大小:1998MB"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<Button
android:id="@+id/btn1"
android:layout_margin="5dp"
android:text="解除安裝應用"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
預覽效果如圖:
接着編寫JAVA代碼
private void InitListView() {
//擷取界面對象
ListView listview=findViewById(R.id.lv1);
//準備資料源
List<Map<String,Object>> maplist=new ArrayList<>();
Map<String,Object> map1=new HashMap<>();
map1.put("logo",R.mipmap.ic_launcher);
map1.put("title","王者榮耀");
map1.put("version","1.8.8");
map1.put("size","1178M");
Map<String,Object> map2=new HashMap<>();
map2.put("logo",R.mipmap.ic_launcher);
map2.put("title","爐石傳說");
map2.put("version","2.8.8");
map2.put("size","1878M");
Map<String,Object> map3=new HashMap<>();
map3.put("logo",R.mipmap.ic_launcher);
map3.put("title","極品飛車");
map3.put("version","2.8.8");
map3.put("size","2478M");
maplist.add(map1);
maplist.add(map2);
maplist.add(map3);
//建立擴充卡
SimpleAdapter adaper=new SimpleAdapter(this,
maplist,R.layout.list_item,
new String[]{"logo","title","version","size"},
new int[]{R.id.logo,R.id.title,R.id.version,R.id.size}
);
//将擴充卡和ListView關聯
listview.setAdapter(adaper);
}
實作效果如圖:
Adapter
Adapter(擴充卡種類)
- ArrayAdapter:适用于簡單的文字清單
- SimpleAdapter:适用于簡單的圖文混排
- SimpleCursorAdapter:适用于資料源是資料庫的清單
- 自定義Adapter(繼承自BaseAdapter):最靈活的擴充卡,适用于絕大多數情況
自定義Adapter的使用
之前我們已經用過ArrayAdapter和SimpleAdapter,現在來學習一下自定義自定義Adapter的使用。
首先建立一個類,繼承自BaseAdapter,
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-jKqLM4HU-1623032124581)(004 Android之其他控件.assets/1622808098021.png)]
BaseAdapter是個抽象類,需要重寫這個類下面的方法
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//輸出日志
Log.d("GuiShou","位置"+i+"view"+view);
//加載一個清單項的布局檔案,擷取界面對象
//擷取布局管理器
LayoutInflater layoutInflater=LayoutInflater.from(mContext);
View iview=layoutInflater.inflate(R.layout.list_item,null);
//将資料添加到布局對象中
Map<String,Object> map=mList.get(i);
int resid= (int)map.get("logo");
String version =(String)map.get("version");
String title=(String)map.get("title");
String Size=(String)map.get("size");
//擷取界面對象
ImageView ilogo=iview.findViewById(R.id.logo);
TextView ititle=iview.findViewById(R.id.showTitle);
TextView iversion=iview.findViewById(R.id.version);
TextView isize=iview.findViewById(R.id.size);
//将資料設定到界面上
ilogo.setImageResource(resid);
ititle.setText(title);
iversion.setText(version);
isize.setText(Size);
//傳回對象
return iview;
}
在類内建立兩個成員變量,并填寫構造方法,用于将資料傳輸到界面
private List<Map<String,Object>> mList;
private Context mContext;
public MyAdapter(List<Map<String,Object>> mList,Context mContext) {
this.mList=mList;
this.mContext=mContext;
}
然後建立擴充卡關聯ListView即可
//建立擴充卡
MyAdapter adaper=new MyAdapter(maplist,this);
//将擴充卡和ListView關聯
listview.setAdapter(adaper);
Spinner下拉清單
Spinner和ListView很相似,使用步驟都差不多
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"></Spinner>
首先準備控件,接着編寫代碼,關聯擴充卡
private void InitSpinner() {
//自己準備一個下拉清單
final String[] strings={"北京","上海","廣州","深圳"};
//擷取控件對象
Spinner spinner=(Spinner)findViewById(R.id.spinner);
//建立擴充卡
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,strings);
//關聯擴充卡
spinner.setAdapter(adapter);
//設定監聽器
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String sel=strings[i];
Toast.makeText(MainActivity.this,sel,Toast.LENGTH_LONG);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
實際效果如圖:
AutoCompleteTextView自動補全
控件代碼如下:
<AutoCompleteTextView
android:id="@+id/auto1"
android:completionThreshold="1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
completionThreshold屬性表示輸入第幾個字元開始提示。
Activity設定代碼如下:
private void InitAutoText() {
//擷取界面對象
AutoCompleteTextView actv=(AutoCompleteTextView)findViewById(R.id.auto1);
//準備資料源
String[] objects=new String[]{"hello1","hello2","hello3","world"};
//建立擴充卡 設定資料
//建立擴充卡
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,objects);
//關聯擴充卡
actv.setAdapter(adapter);
}
實際效果如圖: