日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中的ListView

發(fā)布時(shí)間:2025/4/5 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中的ListView 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1 ListView概述
  • 2 適配器
    • 2.1 ArrayAdapter
    • 2.2 SimpleAdapter
    • 2.3 BaseAdapter

1 ListView概述

下面看一下ListView的應(yīng)用場景:


2 適配器

先看下適配器的使用步驟:

  • 準(zhǔn)備布局(每一項(xiàng)的顯示效果)
  • 準(zhǔn)備數(shù)據(jù)源
  • 實(shí)例化適配器(布局+數(shù)據(jù)源)
  • 為ListView設(shè)置適配器
  • 2.1 ArrayAdapter

    效果如下:

    代碼也十分簡單:

    package com.example.listviewdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView;/*** 1.準(zhǔn)備布局(每一項(xiàng)的顯示效果)* 2.準(zhǔn)備數(shù)據(jù)源* 3.實(shí)例化適配器(布局+數(shù)據(jù)源)* 4.為ListView設(shè)置適配器*/ public class ArrayActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_array);ListView listView1 = findViewById(R.id.list_view1);//參數(shù)1:環(huán)境上下文(this)//參數(shù)2:代表數(shù)據(jù)項(xiàng)所應(yīng)用的布局//參數(shù)3:數(shù)據(jù)源(數(shù)組)String[] data = {"AA","BB","CC","DD","EE","FF","GG","AA","BB","CC","DD","EE","FF","GG","AA","BB","CC","DD","EE","FF","GG","AA","BB","CC","DD","EE","FF","GG"};//使用自定義資源ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item2,R.id.txt1,data);listView1.setAdapter(adapter);} }

    2.2 SimpleAdapter

    先看下要實(shí)現(xiàn)的效果:

    首先我們要自定義列表顯示的layout:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="wrap_content"><ImageViewandroid:id="@+id/qq_img"android:layout_width="50dp"android:layout_height="65dp"android:background="@mipmap/caocao"/><TextViewandroid:id="@+id/qq_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/qq_img"android:textSize="26sp"android:text="曹操"/><TextViewandroid:id="@+id/qq_mood"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/qq_img"android:layout_below="@id/qq_name"android:textColor="#00ffff"android:text="測試數(shù)據(jù)"/> </RelativeLayout>

    然后定義Activity對應(yīng)的Layout:

    <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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=".SimpleActivity"><ListViewandroid:id="@+id/list_view2"android:layout_width="match_parent"android:layout_height="match_parent"></ListView> </androidx.constraintlayout.widget.ConstraintLayout>

    然后看下Java代碼:

    package com.example.listviewdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; 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 SimpleActivity extends AppCompatActivity {private List<Map<String,Object>> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simple);//獲取ListView對象ListView listView2 = findViewById(R.id.list_view2);//實(shí)例化適配器對象//參數(shù)1:this//參數(shù)2:數(shù)據(jù)源initData();//參數(shù)3:每一項(xiàng)布局//參數(shù)4:數(shù)據(jù)來源的key數(shù)組String[] from = {"img","name","mood"};//參數(shù)5:數(shù)據(jù)去向的id數(shù)組int[] to = {R.id.qq_img,R.id.qq_name,R.id.qq_mood};//參數(shù)45對應(yīng)索引上,from數(shù)組的元素代碼數(shù)據(jù)源每個map的key,該key所指代的數(shù)據(jù)//會作為to數(shù)組對應(yīng)索引上id所代表的控件的內(nèi)容顯示處理SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.item3,from,to);//為ListView設(shè)置適配器listView2.setAdapter(adapter);//點(diǎn)擊事件listView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {//用Toast提示Name MoodMap<String,Object> map = data.get(i);String name = map.get("name").toString();String mood = map.get("mood").toString();Toast.makeText(SimpleActivity.this,name+" "+mood,Toast.LENGTH_SHORT).show();}});}public void initData(){//左邊:頭像 右上:名字 右下:心情Map<String,Object> map1 = new HashMap<>();map1.put("img",R.mipmap.caocao);map1.put("name","曹操");map1.put("mood","寧教我負(fù)天下人,休教天下人負(fù)我");Map<String,Object> map2 = new HashMap<>();map2.put("img",R.mipmap.zhenji);map2.put("name","甄姬");map2.put("mood","飄搖兮若流風(fēng)之回雪,仿佛兮若輕云之蔽月");Map<String,Object> map3 = new HashMap<>();map3.put("img",R.mipmap.simayi);map3.put("name","司馬懿");map3.put("mood","無奈天命之子");Map<String,Object> map4 = new HashMap<>();map4.put("img",R.mipmap.guojia);map4.put("name","郭嘉");map4.put("mood","哦");Map<String,Object> map5 = new HashMap<>();map5.put("img",R.mipmap.caocao);map5.put("name","曹操");map5.put("mood","寧教我負(fù)天下人,休教天下人負(fù)我");Map<String,Object> map6 = new HashMap<>();map6.put("img",R.mipmap.zhenji);map6.put("name","甄姬");map6.put("mood","飄搖兮若流風(fēng)之回雪,仿佛兮若輕云之蔽月");Map<String,Object> map7 = new HashMap<>();map7.put("img",R.mipmap.simayi);map7.put("name","司馬懿");map7.put("mood","無奈天命之子");Map<String,Object> map8 = new HashMap<>();map8.put("img",R.mipmap.guojia);map8.put("name","郭嘉");map8.put("mood","哦");data.add(map1);data.add(map2);data.add(map3);data.add(map4);data.add(map5);data.add(map6);data.add(map7);data.add(map8);} }

    2.3 BaseAdapter

    下面先看下要實(shí)現(xiàn)的效果:

    首先看下主頁面的xml文件:

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".BaseActivity"><ListViewandroid:id="@+id/list_view3"android:layout_width="match_parent"android:layout_height="match_parent"></ListView><ImageViewandroid:id="@+id/write"android:layout_width="80dp"android:layout_height="80dp"android:src="@mipmap/write"android:layout_gravity="right|bottom"android:layout_margin="40dp"/> </FrameLayout>

    然后看下item的xml文件:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><!--頭像,昵稱,發(fā)表時(shí)間(靜態(tài)),發(fā)表內(nèi)容,點(diǎn)贊,評論,轉(zhuǎn)發(fā)--><ImageViewandroid:id="@+id/profile"android:layout_width="80dp"android:layout_height="80dp"android:src="@mipmap/profile1"android:layout_margin="5dp"/><TextViewandroid:id="@+id/nickname"android:layout_width="match_parent"android:layout_height="40dp"android:text="用戶1"android:textSize="26sp"android:layout_toRightOf="@id/profile"android:layout_marginTop="5dp"/><TextViewandroid:layout_width="match_parent"android:layout_height="40dp"android:text="2048-10-24"android:textSize="22sp"android:layout_toRightOf="@id/profile"android:layout_below="@id/nickname"/><TextViewandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="啊,多么有意義的日子呀!!"android:textSize="22sp"android:layout_below="@id/profile"/><ImageViewandroid:id="@+id/repost"android:layout_width="40dp"android:layout_height="40dp"android:src="@mipmap/repost"android:layout_below="@id/content"android:layout_alignParentRight="true"android:layout_marginRight="10dp"/><ImageViewandroid:id="@+id/comment"android:layout_width="40dp"android:layout_height="40dp"android:src="@mipmap/comment"android:layout_below="@id/content"android:layout_toLeftOf="@id/repost"android:layout_marginRight="10dp"/><ImageViewandroid:id="@+id/like"android:layout_width="40dp"android:layout_height="40dp"android:src="@mipmap/like"android:layout_below="@id/content"android:layout_toLeftOf="@id/comment"android:layout_marginRight="10dp"/> </RelativeLayout>

    這里我們需要定義一個實(shí)體類,實(shí)體類如下:

    package com.example.listviewdemo;public class Msg {private int profile;private String nickname;private String content;private boolean isLike;public int getProfile() {return profile;}public void setProfile(int profile) {this.profile = profile;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public boolean isLike() {return isLike;}public void setLike(boolean like) {isLike = like;}public Msg(int profile, String nickname, String content, boolean isLike) {this.profile = profile;this.nickname = nickname;this.content = content;this.isLike = isLike;} }

    然后我們需要定義自己的Adapter類:

    package com.example.listviewdemo;import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;import java.util.List;//根據(jù)準(zhǔn)備好的數(shù)據(jù)源和子項(xiàng)布局完成ListView效果的一一設(shè)置 //做出一些細(xì)節(jié)處理 public class MyAdapter extends BaseAdapter {private List<Msg> list;private Context ctx;public MyAdapter(List<Msg> list, Context ctx){this.list = list;this.ctx = ctx;}//獲取數(shù)量(設(shè)置ListView的長度)@Overridepublic int getCount() {return list.size();}//獲取視圖(設(shè)置ListView每一項(xiàng)的顯示效果)--每個視圖出現(xiàn)時(shí)都會執(zhí)行@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {//完成對view的設(shè)置//將布局資源轉(zhuǎn)為View//參數(shù)1:你所要引用的布局資源//RecycleBinViewHolder holder;if(view == null) {Log.e("TAG", "======" + i);//優(yōu)化1:利用進(jìn)入RecycleBin中的View,減少讀view的賦值 (數(shù)據(jù)項(xiàng)看不到時(shí)相關(guān)視圖就會進(jìn)入RecycleBin中)view = LayoutInflater.from(ctx).inflate(R.layout.item4, null);holder = new ViewHolder();holder.profile = view.findViewById(R.id.profile);holder.nickname = view.findViewById(R.id.nickname);holder.content = view.findViewById(R.id.content);holder.like = view.findViewById(R.id.like);holder.comment = view.findViewById(R.id.comment);holder.repost = view.findViewById(R.id.repost);view.setTag(holder);}else{//通過getTag()取出ViewHolder對象,然后能過直接通過holder.控件的方式在外面直接操作控件//從而避免了大幅度使用findViewById操作//而事實(shí)上,getTag()本身操作效率高holder = (ViewHolder) view.getTag();}Msg m = list.get(i);//頭像 // ImageView profile = view.findViewById(R.id.profile);holder.profile.setImageResource(m.getProfile());//昵稱 // TextView nickname = view.findViewById(R.id.nickname);holder.nickname.setText(m.getNickname());//內(nèi)容 // TextView content = view.findViewById(R.id.content);holder.content.setText(m.getContent());//是否點(diǎn)贊 // ImageView like = view.findViewById(R.id.like);if(m.isLike()){holder.like.setImageResource(R.mipmap.liked);}else{holder.like.setImageResource(R.mipmap.like);}//評論 // ImageView comment = view.findViewById(R.id.comment);holder.comment.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(ctx,"你點(diǎn)擊了評論",Toast.LENGTH_SHORT).show();}});//轉(zhuǎn)發(fā) // ImageView repost = view.findViewById(R.id.repost);holder.repost.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(ctx,"--------轉(zhuǎn)發(fā)----------",Toast.LENGTH_SHORT).show();}});return view;}//==============================================醬油方法//獲取子項(xiàng)@Overridepublic Object getItem(int i) {return null;}//獲取子項(xiàng)id@Overridepublic long getItemId(int i) {return 0;}//1.自定義一個類,叫做ViewHolder//2.將需要保存的視圖聲明為公開的屬性//3.什么時(shí)候保存?當(dāng)view為null時(shí),完成對ViewHolder的實(shí)例化工作,并為各個控件屬性賦值//4.什么時(shí)候用? 什么時(shí)候都要用(性能的提升是在view不為null時(shí)體現(xiàn),滾動ListView時(shí)體現(xiàn))//5.怎么用?當(dāng)view為null時(shí),完成了ViewHolder及內(nèi)部控件屬性的初始化工作后,調(diào)用一句代碼//view.setTag(holder);//當(dāng)view不為null時(shí),holder = view.getTag();static class ViewHolder{public ImageView profile,like,comment,repost;public TextView nickname,content;} }

    接下來看下最后的Activity:

    package com.example.listviewdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView;import java.util.ArrayList; import java.util.List;public class BaseActivity extends AppCompatActivity {private ListView listView3;private ImageView write;private List<Msg> list = new ArrayList<>();private int[] ps = {R.mipmap.profile1,R.mipmap.profile2,R.mipmap.profile3,R.mipmap.profile4,R.mipmap.profile5,R.mipmap.profile6,R.mipmap.profile7,R.mipmap.profile8};private BaseAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_base);listView3 = findViewById(R.id.list_view3);write = findViewById(R.id.write);initData();//需要傳的參數(shù):環(huán)境,數(shù)據(jù)源adapter = new MyAdapter(list,this);//設(shè)置適配器listView3.setAdapter(adapter);write.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Msg m = new Msg(R.mipmap.profile9,"paradox","這是動態(tài)新增的說說",false);list.add(m);//通知適配器更新數(shù)據(jù)adapter.notifyDataSetChanged();//設(shè)置listview自動顯示到最新數(shù)據(jù)listView3.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);}});}private void initData() {for(int i = 1 ; i <= 8 ; i++){Msg m = new Msg(ps[i-1],"用戶"+i,"今天天氣好晴朗,慕課處處好風(fēng)光"+i,i%2==0?true:false);list.add(m);}} }

    我們可以看到在ListView中進(jìn)行了2個優(yōu)化。ViewHolder通常出現(xiàn)在適配器里,為的是listview滾動的時(shí)候快速設(shè)置值,而不必每次都重新創(chuàng)建很多對象,從而提升性能。

    總結(jié)

    以上是生活随笔為你收集整理的Android中的ListView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 猛1被调教成公厕尿便失禁网站 | 北条麻妃一区二区三区四区五区 | 蜜桃久久一区二区三区 | 18禁裸乳无遮挡啪啪无码免费 | 精品色| 国产吞精囗交久久久 | 国产盗摄一区二区 | 国产一区二区三区视频播放 | 国产免费观看一区 | 精品久久久久久久无码 | 91精品国产91久久久久青草 | 97视频在线观看免费高清完整版在线观看 | 小优视频污 | 欧美天堂在线 | 亚洲欧美天堂 | 人人爽av | 亚洲精品久久久久av无码 | 亚洲一区网 | 日啪| 久久综合社区 | 成人短视频在线免费观看 | www.亚洲人 | 欧美 日韩 国产 一区 | 国产淫视 | 国产视频二区三区 | 爱草av| 求个黄色网址 | 国产自精品 | 91精品国自产在线观看 | 91爱爱影院 | av动漫网| 最新av网站在线观看 | av黄色大片 | 亚洲性网 | av日韩精品| 91在线小视频 | 梦梦电影免费高清在线观看 | 国产成人av在线播放 | 大胸美女无遮挡 | 国产男女精品 | 大黄毛片 | xxxxav| 精品欧美色视频网站在线观看 | 最新日韩在线视频 | 在线免费不卡视频 | 女警白嫩翘臀呻吟迎合 | 四季av中文字幕 | 欧美午夜视频在线观看 | 国内精品人妻无码久久久影院蜜桃 | 欧美少妇诱惑 | av免费观看网址 | 97看片吧 | 一区二区三区日韩 | 欧美 亚洲 另类 激情 另类 | 国产精品福利视频 | 波多野吉衣一区二区三区 | 高清成人 | 午夜丁香网 | 岛国免费视频 | 男人桶女人桶爽30分钟 | 久久国产精品无码一级毛片 | 欧美无马| av一本在线| 影音先锋中文在线 | 一级黄色a级片 | 色综合天天色 | 色天使亚洲 | 男女午夜爽爽爽 | 国产精品久久久久久免费免熟 | 欧美jizz18性欧美 | 一道本在线观看视频 | 91视频播放| 日本黄视频在线观看 | 奇米在线观看 | 国产激情无码一区二区三区 | 亚洲一区二区三区在线观看视频 | 午夜久久久精品 | bt天堂av | 让男按摩师摸好爽 | www.黄色片 | 黑人狂躁日本妞hd | 国内精品一区二区 | 色视频免费看 | 天堂欧美城网站网址 | 人人妻人人澡人人爽精品 | 五月天综合色 | 91黄色免费 | 国产男女猛烈无遮挡免费视频动漫 | 成人黄色一级片 | 国产网红主播精品av | 天天艹天天爽 | www中文字幕在线观看 | 91一区视频| 日韩一区二区三区四区 | 国产精品免费一区二区三区都可以 | 美女脱裤子让男人捅 | 综合色区 | 日韩午夜电影网 | 久久久.com |