Android控件--定制ListView界面

0.前言

    学过Android的人,我想肯定使用该Android的ListView控件,毕竟当要显示列表的时候,例如qq的消息界面、聊天界面,手机显示联系人,这些无疑都是使用到了ListView
 这个Android最为常用的界面。那么接下来就谈谈如何自己创建一个适配器去订制ListView界面的。(注意:本文介绍的适用列表每一项的内容一样的情况)

1.在AndroidStudio新建Android工程

     工程中的Androidmanifest.xml保持不变

2.在main_activity中加入一个ListView控件,并且声明id

<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"/>

3.新建一个布局文件item_activity.xml

     显示每个列表项要展示的内容,本例子展示的是一个图片,两个文本(一个表示文本标题,
 另一个表示的是文本内容),采用的是相对布局,文本内容位于文本标题的正下方
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/relative"
    android:paddingBottom="4dip"
    android:paddingLeft="12dip"
    android:paddingRight="12dip"
    >
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:id="@+id/image"
        android:paddingTop="12dip"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/itemTitle"
        android:text="TextView1"
        android:textSize="20dip"
        />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/itemText"
        android:text="TextView2"
        android:layout_below="@+id/itemTitle"
        />
</RelativeLayout>
以上已经介绍完整个例子的布局文件,接下来讨论的是使用Java代码去实现定制ListView界面的功能

4.在src中创建ListItem.java类

     这个类中的属性与item_activity.xml中的各个控件相对应,并且针对每个属性要写getter方法(可以在后面新建的适配器中使用它)
 1  package dragon.csu.edu.pojoj;
 2
 3 public class ListItem {
 4     private int imageId;
 5     private String itemTitle;
 6     private String itemText;
 7
 8     public ListItem(int imageId, String itemTitle, String itemText) {
 9         this.imageId = imageId;
10         this.itemTitle = itemTitle;
11         this.itemText = itemText;
12     }
13
14     public int getImageId() {
15         return imageId;
16     }
17
18     public String getItemTitle() {
19         return itemTitle;
20     }
21
22     public String getItemText() {
23         return itemText;
24     }
25 }

5.在src中创建ListViewAdapter.java类

   这个就是本例子的重点了,首先要讲的是这个类要继承于ArrayAdapter这个类,这样就可以作为传入ListView的参数,不继承就无法进行;其次是内部类ListHoder,使用这个内部类的作用
就是可以当我们是第二次访问的时候,它会将第一次访问的ListView中的信息进行相应的保存,这无疑可以节省界面显示的时间,不用在进行数据的获取。具体详细内容中的解释,不过多介绍
 1 package dragon.csu.edu.util;
 2
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.ArrayAdapter;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10
11 import org.w3c.dom.Text;
12
13 import java.util.List;
14
15 import dragon.csu.edu.androidexample.R;
16 import dragon.csu.edu.pojoj.ListItem;
17
18 public class ListViewAdapter extends ArrayAdapter<listitem> {
19     private int resourceId;//记录的是item_activity.xml的布局id
20     public ListViewAdapter(Context context,int resourceId1,List<listitem> listItems) {
21         super(context,resourceId1,listItems);
22         resourceId=resourceId1;
23     }
24     @Override
25     public View getView(int position, View convertView, ViewGroup parent){
26         ListItem listItem=getItem(position);
27         View view;
28         ViewHolder viewHolder;
29         //当用户为第一次访问的时候
30         if(convertView==null){
31             //将item_activity布局解析成显示界面
32             view = LayoutInflater.from(getContext()).inflate(resourceId,null);
33             viewHolder=new ViewHolder();
34             //获取item_activity.xml中控件,并将其保存在viewHolder中
35             viewHolder.imageView=(ImageView)view.findViewById(R.id.image);
36             viewHolder.itemTitle=(TextView)view.findViewById(R.id.itemTitle);
37             viewHolder.itemText=(TextView)view.findViewById(R.id.itemText);
38             //设置将数据进行缓存
39             view.setTag(viewHolder);
40         }else{
41             //第二次访问直接读取第一次访问使存取的数据
42             view=convertView;
43             viewHolder=(ViewHolder)view.getTag();
44         }
45         //将数据返回到item_activity.xml中的每一个空间中
46         viewHolder.imageView.setImageResource(listItem.getImageId());
47         viewHolder.itemTitle.setText(listItem.getItemTitle());
48         viewHolder.itemText.setText(listItem.getItemText());
49         return view;
50     }
51     class ViewHolder{
52         private ImageView imageView;
53         private TextView itemTitle;
54         private TextView itemText;
55     }
56 }
完成了以上的内容,就剩下最后一步了

6.编写MainActivity.java代码

当完成以上的代码,编写MainActivity.java就显得特别的简单
 1 package dragon.csu.edu.androidexample;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.ListView;
 7
 8 import java.util.ArrayList;
 9 import java.util.List;
10
11 import dragon.csu.edu.pojoj.ListItem;
12 import dragon.csu.edu.util.ListViewAdapter;
13
14 public class MainActivity extends Activity {
15     ArrayList<listitem> lists=new ArrayList<listitem>();
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.list_view_activity);
20         //得到listView
21         ListView listView=(ListView)findViewById(R.id.listView);
22         initListItem();//初始化数据
23         //第一个参数表示上下文,第二个表示要显示的布局id,第三个表示传入的参数
24         ListViewAdapter listViewAdapter=new ListViewAdapter(MainActivity.this,R.layout.
25                 item_activity,lists);
26         //将item_activity.xml中的布局导入ListView中
27         listView.setAdapter(listViewAdapter);
28     }
29     public void initListItem(){
30         ListItem list1=new ListItem(R.drawable.image5,"Level 1","1");
31         ListItem list2=new ListItem(R.drawable.image5,"Level 2","2");
32         ListItem list3=new ListItem(R.drawable.image5,"Level 3","3");
33         lists.add(list1);
34         lists.add(list2);
35         lists.add(list3);
36     }
37
38 }
这样,就完成了定制ListView界面.
本文为个人原创,转载请注明出处

原文地址:https://www.cnblogs.com/seizemiss/p/9406763.html

时间: 2024-11-08 22:35:10

Android控件--定制ListView界面的相关文章

Android控件之ListView的使用

ListView是Android当中一个非常常用的数据显示控件. 第一种可以使用List<HashMap<String , Object>>,作为适配器的数据源来显示要显示的数据. XML布局文件之item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

Android控件之ListView

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示. 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据 具体的将被映射的字符串,图片,或者基本组件. 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和自定义Adapter 1.关于几种Adapter 以ArrayAdapter最为简单,只能展示一行字.S

Android 控件使用

1.Android控件之TextView探究 2.Android控件之EditView探究 3.Android控件之CheckBox.RadioButton探究 4.Android控件之ImageView探究 5.Android控件之GridView探究 6.Android控件之ListView探究一 7.Android控件之ListView探究二 8.Android控件之ToggleButton探究 9.Android控件之DatePicker.TimePicker探究 10.Android控

[Android Pro] android控件ListView顶部或者底部也显示分割线

reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在顶部是不显示分割线的,但是我们可以使用一些技巧来显示.我们先来看下默认情况下ListView显示的效果: 可以看到顶部是没有分割线的,但是有时候我们的美工硬是在上面画了一条分割线,没办法,我们也得加上,我们在ListView顶部加上一个Header就可以实现,代码如下 listView.addHea

android控件开发之ListView

android控件开发之ListView 本文主要讲述安卓开发中的ListView控件的使用方法 java代码: package com.example.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)

在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位Android界面上的控件,当时只是一笔带过举了个例子.如该文给自己的承诺,今天特撰写此文以描述UIAutomator各种控件定位的方法,以作为前文的姊妹篇互通有无. 1. 背景 为了和前文达成一致,这次的实践对象同样也是使用SDK自带的NotePad应用,同样是尝试去获得在NotesList那个Activity里

Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种FindElement的控件定位方法实践和建议 今天我们换一个渊源更留长,当今更盛行的框架Robotium,实践下看它又是如何对控件进行定位的. 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应用作为我们的试验目标应用,但是这次不仅仅是像以前一样主要围绕Menu Option里面