@tianyu-211
2017-01-15T13:49:39.000000Z
字数 3804
阅读 1052
安卓
activity_main.xml
中要有一个ListView,自定义一个xml布局文件,在ListView中用view.inflate
方法填充自定义的xml布局文件.
首先文件布局除了自带的activity_main.xml
以外至少还要有一个自定义的比如Item.xml
布局文件,用来定义你想要的ListView的样式。
然后要自定义一个Info.java
类用来保存要展示的数据。
package cn.guotianyu.listview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lv;
private List<AppInfo> AppInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
AppInfos = new ArrayList<AppInfo>();
//这里的appInfo01是自己设置数据,可以增加或者删除
AppInfo appInfo01 = new AppInfo();
appInfo01.setAppicon(R.mipmap.ic_launcher);
appInfo01.setAppnname("应用程序01");
appInfo01.setAppsize("18Mb");
AppInfos.add(appInfo01);
//给ListView设置数据适配器
lv.setAdapter(new MyAdapter());
}
//这个class可以写成单独的类
//数据适配器继承BaseAdapter
/**
* 继承BaseAdapter方法需要重写
* 主要两个是
* getCount() //返回列表个数
* getView(int position, View convertView, ViewGroup parent)//返回每个位置条目的view对象
* getItem(int position)//根据位置获得对象
* getItemId(int position) //根据位置获得对象id
* 自动重写这些方法需要选中 BaseAdapter 然后alt+enter 选择Implement methods
*/
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return AppInfos.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
//返回某个位置条目的view对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(MainActivity.this,R.layout.item,null);
//注意,这里需要从view中寻找id,而不是从这个Activity中寻找id
ImageView iv = (ImageView) view.findViewById(R.id.iv);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_size = (TextView) view.findViewById(R.id.tv_size);
//把当前位置的对象取出来
AppInfo appInfo = AppInfos.get(position);
iv.setImageResource(appInfo.getAppicon());
tv_name.setText(appInfo.getAppnname());
tv_size.setText(appInfo.getAppsize());
return view;
}
}
}
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.guotianyu.listview.MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>
这里面主要是设置了Item.xml中的信息,全部get/set方法,只展示部分代码
在android studio中快速设置get/set方法,直接按住Alt+Insert
选择Getter and Setter
就可以
public class AppInfo {
private int appicon;
private String appnname;
private String appsize;
}
<?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">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="名称"
android:textSize="20sp"
android:textColor="#000000"
android:layout_toRightOf="@id/iv"/>
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv"
android:layout_below="@id/tv_name"
android:textSize="16sp"
android:textColor="#99000000"
android:text="大小"/>
</RelativeLayout>