您的位置:首页 > 汽车 > 新车 > ListView

ListView

2024/10/19 16:18:25 来源:https://blog.csdn.net/qq_63589255/article/details/140317579  浏览:    关键词:ListView

样式

适配器Adapter

1、简单列表实现

要有页面+数据+适配器

实现以ListView展示数据,并能够跳转到其他Activity,给了展示数据的点击和长按事件。

1、MainActivity

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void toArrayTest(View view) {Intent intent = new Intent(this, ArrayListActivity.class);startActivity(intent);}
}

2、ArrayListActivity

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class ArrayListActivity extends AppCompatActivity {private ListView mListView;private List<String> mStringList;private ArrayAdapter<String> mArrayAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_array_list);mListView = findViewById(R.id.listview);mStringList = new ArrayList<>();for (int i = 0; i < 50; i++) {mStringList.add("这是条目"+i);}mArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStringList);mListView.setAdapter(mArrayAdapter);mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Toast.makeText(ArrayListActivity.this, "点击了条目" + i, Toast.LENGTH_SHORT).show();}});mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {Toast.makeText(ArrayListActivity.this, "长按了条目" + i, Toast.LENGTH_SHORT).show();return true;}});}
}

3、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingLeft="10dp"><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Array列表"android:onClick="toArrayTest"android:textAllCaps="false"/></LinearLayout></ScrollView>

4、activity_array_list.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"android:orientation="vertical"tools:context=".ArrayListActivity"><ListViewandroid:id="@+id/listview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"android:divider="@android:color/black"android:dividerHeight="1dp"android:scrollbars="none" /></LinearLayout>

2、图文列表实现

注:实现其需要两个布局文件,一个整体布局,一个局部布局(把局部布局导入适配器即可)

1、在MainActivity添加如下代码

public void toSimpleListTest(View view) {Intent intent = new Intent(this, SimpleListActivity.class);startActivity(intent);}

2、SimpleListActivity

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
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 SimpleListActivity extends AppCompatActivity {private ListView listView;private SimpleAdapter simpleAdapter;private List<Map<String, Object>> mList;private int[] images = {R.drawable.test1,R.drawable.test2,R.drawable.test3,R.drawable.test4,R.drawable.test5,R.drawable.test6,R.drawable.test7,R.drawable.test8,R.drawable.test9,};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simple_list);listView = findViewById(R.id.lv);mList = new ArrayList<>();for (int i = 0; i < 50; i++) {Map<String, Object> m = new HashMap<>();m.put("image", images[i % images.length]);m.put("title", "标题" + i);m.put("content", "内容" + i);mList.add(m);}simpleAdapter = new SimpleAdapter(this,mList,R.layout.list_item_layout,new String[]{"image", "title", "content"},new int[]{R.id.iv_img, R.id.tv_title, R.id.tv_content});listView.setAdapter(simpleAdapter);listView.setOnItemClickListener((parent, view, position, id) -> {Map<String, Object> map = mList.get(position);String title = (String) map.get("title");String content = (String) map.get("content");int image = (int) map.get("image");String msg = "title: " + title + "\ncontent: " + content + "\nimage: " + image;Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();});}
}

3、activity_simple_list.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"android:orientation="vertical"tools:context=".SimpleListActivity"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

4、list_item_layout.xml(每个小item的样式)

<?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="match_parent"android:paddingLeft="10dp"android:paddingTop="5dp"android:paddingRight="10dp"android:paddingBottom="5dp"><ImageViewandroid:id="@+id/iv_img"android:layout_width="100dp"android:layout_height="100dp"android:scaleType="centerCrop"android:src="@drawable/ic_launcher_background" /><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_toRightOf="@id/iv_img"android:ellipsize="end"android:maxLines="1"android:text="雨中漫步"android:textSize="20sp"android:textStyle="bold" /><TextViewandroid:id="@+id/tv_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/tv_title"android:layout_marginLeft="10dp"android:layout_toRightOf="@id/iv_img"android:ellipsize="end"android:maxLines="3"android:text="人生就像一场旅行,不必在乎目的地,在乎的是沿途的风景以及看风景的心情,让心灵去旅行"android:textSize="16sp" />
</RelativeLayout>

样式效果如图:图文并茂

5、在activity_main.xml中添加如下代码

 <Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Simple列表"android:onClick="toSimpleListTest"android:textAllCaps="false"/>

3、图文复杂列表实现

1、在MainActivity.java中添加如下代码

 public void toBaseListTest(View view) {Intent intent = new Intent(this, BaseAdapterActivity.class);startActivity(intent);}

2、创建ItemBean类

package com.example.myapplication.bean;public class ItemBean {private String title;private String content;private int imageId;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getImageId() {return imageId;}public void setImageId(int imageId) {this.imageId = imageId;}@Overridepublic String toString() {return "ItemBean{" +"title='" + title + '\'' +", content='" + content + '\'' +", imageId=" + imageId +'}';}
}

3、创建自定义适配器MyAdapter

package com.example.myapplication.adapter;import android.content.Context;
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 com.example.myapplication.R;
import com.example.myapplication.bean.ItemBean;import java.util.List;public class MyAdapter extends BaseAdapter {private List<ItemBean> mBeanList;private LayoutInflater mLayoutInflater;private Context mContext;public MyAdapter(List<ItemBean> beanList, Context context) {this.mBeanList = beanList;this.mContext = context;mLayoutInflater = LayoutInflater.from(mContext);}@Override//返回列表项的数量public int getCount() {return mBeanList.size();}@Override//返回指定位置的列表项数据public Object getItem(int i) {return mBeanList.get(i);}@Override//返回指定位置的列表项的IDpublic long getItemId(int i) {return i;}@Override//返回列表项的视图public View getView(int i, View view, ViewGroup viewGroup) {view = mLayoutInflater.inflate(R.layout.list_item_layout, viewGroup, false);ImageView imageView = view.findViewById(R.id.iv_img);TextView tvTitle = view.findViewById(R.id.tv_title);TextView tvContent = view.findViewById(R.id.tv_content);//为控件填充数据ItemBean itemBean = mBeanList.get(i);imageView.setImageResource(itemBean.getImageId());tvTitle.setText(itemBean.getTitle());tvContent.setText(itemBean.getContent());return view;}
}

优化适配器MyAdapter2

主要判断view是否为空,如果为空,则获取image、title、content,然后把它们放到viewHolder里,相当于一个缓存,若不为空,则复用缓存的数据,提高运行速度。

package com.example.myapplication.adapter;import android.content.Context;
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 com.example.myapplication.R;
import com.example.myapplication.bean.ItemBean;import java.util.List;public class MyAdapter2 extends BaseAdapter {private List<ItemBean> mBeanList;private LayoutInflater mLayoutInflater;private Context mContext;public MyAdapter2(List<ItemBean> beanList, Context context) {this.mBeanList = beanList;this.mContext = context;mLayoutInflater = LayoutInflater.from(mContext);}@Override//返回列表项的数量public int getCount() {return mBeanList.size();}@Override//返回指定位置的列表项数据public Object getItem(int i) {return mBeanList.get(i);}@Override//返回指定位置的列表项的IDpublic long getItemId(int i) {return i;}@Override//返回列表项的视图public View getView(int i, View view, ViewGroup viewGroup) {ViewHolder viewHolder = new ViewHolder();if (view == null) {view = mLayoutInflater.inflate(R.layout.list_item_layout, viewGroup, false);ImageView imageView = view.findViewById(R.id.iv_img);TextView tvTitle = view.findViewById(R.id.tv_title);TextView tvContent = view.findViewById(R.id.tv_content);viewHolder.imageView = imageView;viewHolder.tvTitle = tvTitle;viewHolder.tvContent = tvContent;view.setTag(viewHolder);}else {viewHolder = (ViewHolder) view.getTag();}//为控件填充数据ItemBean itemBean = mBeanList.get(i);viewHolder.imageView.setImageResource(itemBean.getImageId());viewHolder.tvTitle.setText(itemBean.getTitle());viewHolder.tvContent.setText(itemBean.getContent());return view;}class ViewHolder {ImageView imageView;TextView tvTitle;TextView tvContent;}
}

4、创建BaseAdapterActivity.java

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;import com.example.myapplication.adapter.MyAdapter;
import com.example.myapplication.adapter.MyAdapter2;
import com.example.myapplication.bean.ItemBean;import java.util.ArrayList;
import java.util.List;public class BaseAdapterActivity extends AppCompatActivity {private ListView mListView;private List<ItemBean> mBeanList;private MyAdapter2 mMyAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_base_adapter);mListView = findViewById(R.id.lv);initView();initData();initEvent();}private void initEvent() {mMyAdapter = new MyAdapter2(mBeanList,this);mListView.setAdapter(mMyAdapter);mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {ItemBean bean = mBeanList.get(i);String title = bean.getTitle();Toast.makeText(BaseAdapterActivity.this,"你点击了" + i + title,Toast.LENGTH_SHORT).show();}});mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {return false;}});}private void initData() {mBeanList = new ArrayList<>();ItemBean newsBean1 = new ItemBean();newsBean1.setTitle("雨中漫步");newsBean1.setContent("人生就像一场旅行,不必在乎目的地,在乎的是沿途的风景以及看风景的心情,让心灵去旅行。\n只想进行一场漫无目的的旅行,在一个有花有海、安静缓慢的地方晒着太阳无所事事。\n背着背包的路上,看过许多人,听过许多故事,见过旅行风景,就这样,慢慢学会了长大。");newsBean1.setImageId(R.drawable.test1);ItemBean newsBean2 = new ItemBean();newsBean2.setTitle("林间穿梭");newsBean2.setContent("只想进行一场漫无目的的旅行,在一个有花有海、安静缓慢的地方晒着太阳无所事事。\n路旁边浪似地滚着高高低低的黄土。太阳给埋在黄土里,发着肉红色。可是太阳还烧得怪起劲的,把他们的皮肉烧得变成紫黑色,似乎还闻得到一股焦味儿。");newsBean2.setImageId(R.drawable.test2);ItemBean newsBean3 = new ItemBean();newsBean3.setTitle("旅行花海");newsBean3.setContent("只想进行一场漫无目的的旅行,在一个有花有海、安静缓慢的地方晒着太阳无所事事。\n背着背包的路上,看过许多人,听过许多故事,见过旅行风景,就这样,慢慢学会了长大。\n" +"\n" +"想呼吸着每座城市的空气,想感受着每座城市的人儿,想看着每座城市的风景。");newsBean3.setImageId(R.drawable.test3);ItemBean newsBean4 = new ItemBean();newsBean4.setTitle("非平衡的线");newsBean4.setContent("一根线如果绷得太紧,总有一天会断裂,一颗心若是禁锢得太久,总有一天会失去平衡,我们需要放飞心灵,让心翱翔在自由的太空。每个人在他的人生发轫之初,总有一段时光,没有什么可留恋,只有抑制不住的梦想,没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。");newsBean4.setImageId(R.drawable.test4);ItemBean newsBean5 = new ItemBean();newsBean5.setTitle("说走就走");newsBean5.setContent("说走就走的旅行,要么缘由幸福稳定和宽裕,要么祸起无力无奈和逃避。\n在旅途中,我遇见了你,你我相识是缘分!看着你手中的戒指,你说,你可以把它取下来吗?当我要取的时候,你淘气的躲开了,你说只有有缘人才可以取下,我看着你手中的戒指,想做你的有缘人,可是我知道结果是惨淡的,但还是心存希望!");newsBean5.setImageId(R.drawable.test5);ItemBean newsBean6 = new ItemBean();newsBean6.setTitle("美好的记忆");newsBean6.setContent("旅行不在乎终点,而是在意途中的人和事还有那些美好的记忆和景色。人生就是一次充满未知的旅行,在乎的是沿途的风景,在乎的是看风景的心情,旅行不会因为美丽的风景终止。走过的路成为背后的风景,不能回头不能停留,若此刻停留,将会错过更好的风景,保持一份平和,保持一份清醒。享受每一刻的感觉,欣赏每一处的风景,这就是人生。(作者:《遇到另一种生活》");newsBean6.setImageId(R.drawable.test6);ItemBean newsBean7 = new ItemBean();newsBean7.setTitle("久违的感动");newsBean7.setContent("人生最好的旅行,就是你在一个陌生的地方,发现一种久违的感动。人生最好的旅行,就是你在一个陌生的地方,发现一种久违的感动");newsBean7.setImageId(R.drawable.test7);ItemBean newsBean8 = new ItemBean();newsBean8.setTitle("流浪日记");newsBean8.setContent("着背包的路上,看过许多人,听过许多故事,见过旅行风景,就这样,慢慢学会了长大。\n每个人在他的人生发轫之初,总有一段时光,没有什么可留恋,只有抑制不住的梦想,没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。");newsBean8.setImageId(R.drawable.test8);ItemBean newsBean9 = new ItemBean();newsBean9.setTitle("山的尽头");newsBean9.setContent("在向山靠近一点,才发现这座山,好象一位诗人遥望远方,等待故人的归来。山上的树,大多数是松树比较突出。松树亭亭玉立的耸立在周围小草小花的中间,仿佛松树就是一位威风的将军,守护着国家的国民。\n在向山靠近一点,才发现这座山,好象一位诗人遥望远方,等待故人的归来。山上的树,大多数是松树比较突出。松树亭亭玉立的耸立在周围小草小花的中间,仿佛松树就是一位威风的将军,守护着国家的国民。\n在向山靠近一点,才发现这座山,好象一位诗人遥望远方,等待故人的归来。山上的树,大多数是松树比较突出。松树亭亭玉立的耸立在周围小草小花的中间,仿佛松树就是一位威风的将军,守护着国家的国民。");newsBean9.setImageId(R.drawable.test9);ItemBean newsBean10 = new ItemBean();newsBean10.setTitle("秦河魅影");newsBean10.setContent("秦淮河、夫子庙,繁华依旧,只少了些当年桨声灯影的风味。喝一碗鸭血粉丝,吃一客蟹黄汤包,坐一次龙舟游船,览一河别样风景,发一回思古幽情,我想,这也许就是所谓夜游秦淮的小资情调了。独游,却只有看客的心情。\n秦淮河、夫子庙,繁华依旧,只少了些当年桨声灯影的风味。喝一碗鸭血粉丝,吃一客蟹黄汤包,坐一次龙舟游船,览一河别样风景,发一回思古幽情,我想,这也许就是所谓夜游秦淮的小资情调了。独游,却只有看客的心情。\n秦淮河、夫子庙,繁华依旧,只少了些当年桨声灯影的风味。喝一碗鸭血粉丝,吃一客蟹黄汤包,坐一次龙舟游船,览一河别样风景,发一回思古幽情,我想,这也许就是所谓夜游秦淮的小资情调了。独游,却只有看客的心情。");newsBean10.setImageId(R.drawable.test10);mBeanList.add(newsBean1);mBeanList.add(newsBean2);mBeanList.add(newsBean3);mBeanList.add(newsBean4);mBeanList.add(newsBean5);mBeanList.add(newsBean6);mBeanList.add(newsBean7);mBeanList.add(newsBean8);mBeanList.add(newsBean9);mBeanList.add(newsBean10);mBeanList.add(newsBean1);mBeanList.add(newsBean2);mBeanList.add(newsBean3);mBeanList.add(newsBean4);mBeanList.add(newsBean5);mBeanList.add(newsBean6);mBeanList.add(newsBean7);mBeanList.add(newsBean8);mBeanList.add(newsBean9);mBeanList.add(newsBean10);}private void initView() {}
}

5、activity_base_adapter.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"android:orientation="vertical"tools:context=".SimpleListActivity"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com