Android控件--定制ListView界面

逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述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方法(可以在后面新建的适配器中使用它)

1package dragon.csu.edu.pojoj; 2 3 public class ListItem { 4private int imageId; 5private String itemTitle; 6private String itemText; 7 8public ListItem(int imageId, String itemTitle, String itemText) { 9this.imageId = imageId; 10this.itemTitle = itemTitle; 11this.itemText = itemText; 12} 13 14public int getImageId() { 15return imageId; 16} 17 18public String getItemTitle() { 19return itemTitle; 20} 21 22public String getItemText() { 23return 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> { 19private int resourceId; //记录的是item_activity.xml的布局id 20public ListViewAdapter(Context context,int resourceId1,List< listitem> listItems) { 21super(context,resourceId1,listItems); 22resourceId=resourceId1; 23} 24@Override 25public View getView(int position, View convertView, ViewGroup parent){ 26ListItem listItem=getItem(position); 27View view; 28ViewHolder viewHolder; 29//当用户为第一次访问的时候 30if(convertView==null){ 31//将item_activity布局解析成显示界面 32view = LayoutInflater.from(getContext()).inflate(resourceId,null); 33viewHolder=new ViewHolder(); 34//获取item_activity.xml中控件,并将其保存在viewHolder中 35viewHolder.imageView=(ImageView)view.findViewById(R.id.image); 36viewHolder.itemTitle=(TextView)view.findViewById(R.id.itemTitle); 37viewHolder.itemText=(TextView)view.findViewById(R.id.itemText); 38//设置将数据进行缓存 39view.setTag(viewHolder); 40}else{ 41//第二次访问直接读取第一次访问使存取的数据 42view=convertView; 43viewHolder=(ViewHolder)view.getTag(); 44} 45//将数据返回到item_activity.xml中的每一个空间中 46viewHolder.imageView.setImageResource(listItem.getImageId()); 47viewHolder.itemTitle.setText(listItem.getItemTitle()); 48viewHolder.itemText.setText(listItem.getItemText()); 49return view; 50} 51class ViewHolder{ 52private ImageView imageView; 53private TextView itemTitle; 54private 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 { 15ArrayList< listitem> lists=new ArrayList< listitem> (); 16@Override 17protected void onCreate(Bundle savedInstanceState) { 18super.onCreate(savedInstanceState); 19setContentView(R.layout.list_view_activity); 20//得到listView 21ListView listView=(ListView)findViewById(R.id.listView); 22initListItem(); //初始化数据 23//第一个参数表示上下文,第二个表示要显示的布局id,第三个表示传入的参数 24ListViewAdapter listViewAdapter=new ListViewAdapter(MainActivity.this,R.layout. 25item_activity,lists); 26//将item_activity.xml中的布局导入ListView中 27listView.setAdapter(listViewAdapter); 28} 29public void initListItem(){ 30ListItem list1=new ListItem(R.drawable.image5,"Level 1","1"); 31ListItem list2=new ListItem(R.drawable.image5,"Level 2","2"); 32ListItem list3=new ListItem(R.drawable.image5,"Level 3","3"); 33lists.add(list1); 34lists.add(list2); 35lists.add(list3); 36} 37 38 }

这样,就完成了定制ListView界面.

本文为个人原创,转载请注明出处

【Android控件--定制ListView界面】 

    推荐阅读