[关闭]
@tianyu-211 2017-01-15T13:49:39.000000Z 字数 3804 阅读 1052

安卓中自定义ListView

安卓


在安卓中使用ListView展示数据需要几个步骤

  1. ListView需要一个数据适配器
  2. 不知道

activity_main.xml中要有一个ListView,自定义一个xml布局文件,在ListView中用view.inflate方法填充自定义的xml布局文件.

首先文件布局除了自带的activity_main.xml以外至少还要有一个自定义的比如Item.xml布局文件,用来定义你想要的ListView的样式。
然后要自定义一个Info.java类用来保存要展示的数据。

MainActivity.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;
    }
 }
}

activity_main.xml布局

<?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>

Info.java

这里面主要是设置了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;

    } 

最后是Item.xml的布局文件

<?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>

最终效果图

效果图

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注