您的位置:首页 > 移动开发 > Android开发

安卓ListView控件显示

2016-08-13 14:33 225 查看

No 1. 安卓ListView 控件控件的显示。

版权声明:喝水不忘挖井人,转载请注明出处,841579064@qq.com。

ListView控件需要显示出来并没有直接的方法可以显示,需要通过设置适配器(Adapter)进行显示的。以下介绍三个常用的适配器的用法。

BaseAdapter

ArrayAdapter

SimpleAdapte

首先完成MainActivity的布局文件

添加ListView控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.jw_chen.a_company.mynews.MainActivity">

<!--此处为MainActivity添加一个ListView-->
<ListView
android:id="@+id/Lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>

</RelativeLayout>


然后我们来给ListView设置要显示的条目

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/iv"
android:layout_width="80"
android:layout_height="80"
android:src="@mipmap/ic_launcher"
android:layout_centerVertical="true"/>

<TextView
android:id="@+id/titles"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_toRightOf="@id/iv"
android:text="大标题栏"
android:textSize="22sp"/>
<TextView
android:id="@+id/detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/titles"
android:layout_toRightOf="@+id/iv"
android:textColor="@android:color/darker_gray"
android:lines="3"
android:text="内容"/>
<TextView
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/detail"
android:layout_alignParentRight="true"
android:textColor="@android:color/holo_red_dark"
android:text="评论。。。"/>
</RelativeLayout>


上面这份代码就定义了条目要显示的内容,分别是三个TextView和一个ImageView。


布局文件定义好了。我们来给ImageView导入几张图片资源文件 以备ImageView调用



准备工作都完成了,下面开始调用ListView来显示我们布局的效果

定义一个信息类,用来创建我们要显示的对象:

package com.jw_chen.a_company.mynews;

/**
* Created by Jw_chen on 2016/8/9.
*/
public class News {
private String title;
private String detail;
private String comment;
private String imageUrl;//该变量在网络下载图片才用到存网址

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getDetail() {
return detail;
}

public void setDetail(String detail) {
this.detail = detail;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

public String getImageUrl() {
return imageUrl;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

}


修改MainActivity中代码:

public class MainActivity extends AppCompatActivity {

private ListView listview;
List<News> newsList = null; //对象我们用一个list集合去存储
News news = null;//news对象

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

newsList = new ArrayList<>();  //把list  new出来

listview = (ListView) findViewById(R.id.Lv);//找到ListView控件

//我们创建10个对象并保存到集合中
for (int i = 0; i < 10; i++) {
news = new News();
news.setTitle("ListView显示 - "+i);
news.setDetail("小智是个大睡个+" + i);
news.setComment("2134100");
news.setImageUrl("http://baidu.com___  "+i%2);

newsList.add(news);  //添加到集合中
news = null;
}

listview.setAdapter(new BaseAdapter() {
@Override
public int getCount() {
return newsList.size();//此处返回要显示的条目总数
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = null;
//此处我将资源id保存到一个数组里面
int[] tp = new int[]{R.drawable.tp_1,R.drawable.tp_2,R.drawable.tp_3,R.drawable.tp_4,};

int choose = 3;//布局文件填充成view对象的方式有三种写法。此处只是定义一个变量来选择用哪种方法,实际开发掌握第一种就好,但是要能看得懂其他写法
switch (choose) {
case 1: {
v = View.inflate(MainActivity.this, R.layout.items, null);//View填充好了就可以找到view中定义的控件并显示数据了
}
break;
case 2: {
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);//获取一个布局文件填充器
v = inflater.inflate(R.layout.items, null); //拿布局文件填充器填充对象
}
break;
case 3:
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);//获取系统服务服务
v = inflater.inflate(R.layout.items, null);
break;
}

TextView title = (TextView) v.findViewById(R.id.titles);
TextView detail = (TextView) v.findViewById(R.id.detail);
TextView comment = (TextView) v.findViewById(R.id.comment);
ImageView iv = (ImageView) v.findViewById(R.id.iv);
title.setText(newsList.get(position).getTitle());
detail.setText(newsList.get(position).getDetail());
comment.setText(newsList.get(position).getComment());
iv.setImageResource(tp[position%4]);//由于图片比较少,此处我们重复利用

return  v;//自处返回填充的Viwe对象            }
});
}
}


以上内容部署完成后就和一显示一个ListView界面了。



BaseAdapter完成了,其他两个同理。

ArrayAdapter

listview.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.items, R.id.titles, new String[]{
"张三0","张三1","张三2","张三3","张三4","张三5","张三6"
}));


SimpleAdapter

List<Map<String, Object>> nlist = new ArrayList<>();
int[] tp = new int[]{R.drawable.tp_1,R.drawable.tp_2,R.drawable.tp_3,R.drawable.tp_4,};
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap();
map.put("tp", tp[i%4]);
map.put("name", newsList.get(i).getTitle());
nlist.add(map);
}
listview.setAdapter(new SimpleAdapter(MainActivity.this, nlist, R.layout.items, new String[]{"tp","name"},new int[]{R.id.iv,R.id.titles}));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐