android 自定义listview控件,一个简单又完整的自定义ListView
ListView
一、简单列表
1.在activity_main中添加控件ListView
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2.设置id
设置该Listview控件的id为Shop_List
3.在MainActivity中写入以下功能:
package com.example.testsomething;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private List shopList = new ArrayList();
//创建ListView
private ListView ShopList;
//定义一个适配器
private ArrayAdapter ShopListAdapter;
//定义一个数组,用于ListView的数据源
// private String[] shops = {"1","002","300","四","wu"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使用ListView展示列表
//向列表中写入数据
for(int i = 0;i<10;i++)
shopList.add(i+" ");
//初始化控件
//将activity_main文件中名文Shop_List的列表控件与ShopList进行绑定
ShopList = findViewById(R.id.Shop_List);
//创建适配器(参数:上下文,列表布局文件,数据源)
ShopListAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1,shopList);
//设置适配器到Listview
ShopList.setAdapter(ShopListAdapter);
}
}
4.运行结果
二、图文混排
实现了简单列表之后,可以对列表中的内容进行自定义开发。
要完成自定义列表应该包括这些:
0.activity_main.xml 其中包含一个Listview
1.listview_item.xml 用于指定列表中每一行的样式
2.ListViewAdapter.java 数据适配器
3 列表属性类(可有可无,这里包含该属性)
4.MainActivity.java
有ListView一定要有item,因为光有列表不行,还必须给列表添加内容,而item就是列表里面每一行显示的内容,两者相辅相成,共同组成列表。
现在在简单列表的基础上开始操作:
1.创建一个ListView_item.xml
其中加入了一个ImageView和一个TextView,并分别设置其id为 list_image 和 list_name 。
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:id="@+id/list_image"
android:layout_width="80dp"
android:layout_height="100dp"
android:layout_weight="1"
app:srcCompat="@mipmap/ic_launcher" />
android:id="@+id/list_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Name" />
2.创建一个数据适配器ListViewAdapter 继承自ArrayAdapter
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import com.example.testsomething.R;
import java.util.List;
class ListViewAdapter extends ArrayAdapter{
private final int resourceId;
public ListViewAdapter(Context context, int textViewResourceId, List objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
List_content shop = (List_content) getItem(position); // 获取当前项实例
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);//实例化一个对象
ImageView shopImage = (ImageView) view.findViewById(R.id.list_image);//获取该布局内的图片视图
TextView shopName = (TextView) view.findViewById(R.id.list_name);//获取该布局内的文本视图
shopImage.setImageResource(shop.getImageId());//为图片视图设置图片资源
shopName.setText(shop.getName());//为文本视图设置文本内容
return view;
}
}
3.创建属性文件 List_content
该文件用于将列表中的自定义属性进行整合,方便以后操作
class List_content {
private String name;
private int imageId;
public List_content(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}
4.重写Mainactivity
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private List shopList = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList(); // 初始化数据
ListViewAdapter adapter = new ListViewAdapter(MainActivity.this, R.layout.listview_item, shopList);
ListView listView = (ListView) findViewById(R.id.Shop_List);
listView.setAdapter(adapter);
}
private void initList() {
List_content List_name_1 = new List_content("List_name_1", R.drawable.icon);
shopList.add(List_name_1);
List_content List_name_2 = new List_content("List_name_2", R.drawable.icon);
shopList.add(List_name_2);
List_content List_name_3 = new List_content("List_name_3", R.drawable.icon);
shopList.add(List_name_3);
List_content List_name_4 = new List_content("List_name_4", R.drawable.icon);
shopList.add(List_name_4);
List_content List_name_5 = new List_content("List_name_5", R.drawable.icon);
shopList.add(List_name_5);
List_content List_name_6 = new List_content("List_name_6", R.drawable.icon);
shopList.add(List_name_6);
}
}
注意事项
ListViewAdapter adapter = new ListViewAdapter(MainActivity.this, R.layout.listview_item, shopList);
第二个参数R.layout.listview_item是指定样式的关键;
第三个参数shopList则是具有List_content属性的列表,用于添加数据;
列表数据每变化一次,适配器就需要重新绑定并设置一次
ListViewAdapter adapter = new ListViewAdapter(MainActivity.this, R.layout.listview_item, shopList);
listView.setAdapter(adapter);
ListView listView = (ListView) findViewById(R.id.Shop_List);
其中,R.id.Shop_List的Shop_List即为主布局文件中列表的id
3.如果想要为列表添加简单的长按事件删除功能,可以在onCreat方法中加入以下代码。
//长按事件监听
listView.setOnItemLongClickListener(new CAdapterView.OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView> adapterView, View view, int i, long l) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("删除");
builder.setMessage("确认删除");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
shopList.remove((int)l); //l为行数下标
//删除后列表变化,要重新赋值
ListViewAdapter adapter = new ListViewAdapter(MainActivity.this, R.layout.listview_item, shopList);
//重新绑定
listView.setAdapter(adapter);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel(); // 取消对话框
}
});
//显示对话框
builder.show();
return false;
}
});
4.无缘无故的错误
(1)遇到无缘无故的错误导致app运行终止时尝试重启app两到三次。
(2)如果重启无效或在模拟器中报错“app屡次运行后停止”,但代码中未检查到任何错误,此时检查所有的绑定文,
如:R.id.Shop_List , List shopList ,R.layout.activity_main等,如果文件较多,绑定的xml文件或控件不匹配,则不会报错但会导致运行失败。
标签:name,自定义,List,content,完整,new,import,ListView
来源: https://blog.csdn.net/qq_51985653/article/details/113740557
android 自定义listview控件,一个简单又完整的自定义ListView相关推荐
- listview控件Android,Android中ListView控件的简单使用
文章引自郭霖<第一行代码> ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕 使用LIstView控件 1 在布局文件中引入Li ...
- 【按住你的心】——Android开发CheckBoxRadioButton控件的简单使用
Android的控件很多,我们从最常用的一些控件学起,今天我们学习CheckBox和RadioButton. 首先,我们要在main.xml文件中添加控件: <?xml version=&quo ...
- html日期横向拖动选择控件,一个简单横向javascript日期控件
具体要求就是: 1.日期表格横向占满页面. 2.每个月的日期列表横向显示在一排,而不是像网上的很多日期控件显示一个方块. 3.要求只有年月日可选,选择年或月后自动更新对应日期(这个每个日期控件都有的) ...
- silverlight创建新的控件——一个简单的弹出菜单
照旧,直接贴代码 <UserControlxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...
- Android 常见界面控件(ListView、RecyclerView、自定义View篇)
Android 常见界面控件(ListView.RecyclerView.自定义View篇) 目录 3.3 ListView的使用 3.3.1 ListView控件的简单使用 3.3.2 常用数据适配 ...
- Android 自定义组合控件小结
Android 自定义组合控件小结 引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控 ...
- Android列表ListView控件的使用
在Android开发中,ListView是比较常用的控件,它以列表的形式显示具体内容,并且能够根据数据的长度自适应显示. 在ListView中可以根据需要显示自定义的列表内容,包括文字(TextVie ...
- 【转】 ASP.NET 3.5中使用新的ListView控件
ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,使之成为一项极好的方式,建立以数据为中心的Web应用程序. 当你编写以用户为中心的应用程序时,总需要某种形式的数 ...
- VB 单击ListView控件某列表头进行排序
VB 单击ListView控件某列表头进行排序,实现方法比较简单,不用写什么函数,ListView控件本身就有排序功能了. Private Sub ListView1_ColumnClick(ByVa ...
最新文章
- firewalld的9个zone、firewalld关于zone和service的操作
- 金鑫是著名高校计算机,金鑫 个人简历
- ssd网络结构_封藏的SSD(Single Shot MultiBox Detector)笔记
- java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
- 73. 文件上传函数封装
- c语言程序输出数字图形,C语言数组应用之图形数字的输出
- 使用Windows自带工具校验文件MD5
- # 研究杂感 × VOSviewer(第二辑)
- 动软代码生成器的使用
- dede后台验证码一直错误的处理方法
- jeb配置java环境_jeb 提示 java help space
- 2020年ESA中国区10m地表覆盖数据的镶嵌、裁剪与分省数据分享
- 数据盘点各城市公积金排名,你能拿多少?
- 数据挖掘导论课后习题答案-第七章
- 如何自建微信外卖平台_怎么做微信外卖小程序_微信外卖小程序创建图文教程...
- 两个三进制数相加,输出一个结果为三进制形式的和
- 目标端的trail文件损坏或误删除,如何重新进行抽取
- [java编程题]买苹果
- linux常用命令2
- LTE -UL_grant中RIV的编码和解码
热门文章
- 自定义小程序popupwindow弹出框
- cqrs java_深入浅出Event Sourcing和CQRS
- 广联达java_广联达软件研发面试
- php转为文体,(转)写给新教师:阅读教学如何“关注”文体特色
- 神经网络输入图片大小,大脑神经网络图片
- 三种删除数据命令:drop、truncate、delete区别
- php面试上机测试题_PHP面试题及答案
- 阿里云ACE认证介绍
- java计算机毕业设计Vue潍坊学院宿舍管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
- 可爱的python图片_《可爱的Python》读书笔记(六)