Android ListView(一)

针对安卓代码基础,我大体分为三类:语法、控件和生命周期,此文简单记录一下常用控件之一ListView。

项目名称 ListDemo-Android
使用Android studio创建一个项目,名为ListDemo,创建时生成一个MainActivity的空界面
1,在layout文件包中,找到activity_main.xml文件,设置TetxView的id为text,添加一个ListView的控件,占满屏幕。代码如下:


    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/text"
        >

    </ListView>


2.在MainActivity.java文件中,声明变量:textView ,listView ,以及一个类型为ListViewAdapter的操作者 listViewAdapter
代码如下:
    private TextView textView;
    private ListView listView ;

    private ListViewAdapter listViewAdapter ;


实例化变量,代码如下:
        textView = (TextView) findViewById(R.id.text);
        listView = (ListView) findViewById(R.id.listview);

        textView.setText("代码展示ListView的实例:");

创建ListViewAdapter.java,继承BaseAdapter,引入方法,代码如下:

public class ListViewAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return 0;
    }

    @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) {
        return null;
    }
}


现在Demo只做简单展示,每个列表表格都有:名字,年龄,头像三个元素。所以需要声明一个UserModel类型的数组和UserModel.java的类,以及一个ListAdapterView的静态类,
在ListViewAdapter中,声明一个上下文,定义一个构造函数:代码:
UserModel.java

public class UserModel {
    private int iconint ;
    private String name ;
    private int age ;


    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    public void setIconint(int iconint) {
        this.iconint = iconint;
    }

    public int getIconint() {
        return iconint;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

listViewAdapter:

public class ListViewAdapter  extends BaseAdapter{

    private Context context ;
    private List<UserModel> list;

    @Override
    public int getCount() {
        return list != null ? list.size() : 0;
    }

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

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

    private ListAdapterView adapterView ;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        adapterView = null ;
        if (convertView == null) {
            adapterView = new ListAdapterView();

            convertView = LayoutInflater.from(context).inflate(R.layout.view_adapter,parent,false);
            adapterView.icon = (ImageView ) convertView.findViewById(R.id.icon) ;
            adapterView.name = (TextView) convertView.findViewById(R.id.name);
            adapterView.age = (TextView) convertView.findViewById(R.id.age);
//            View v = Inflater.class
            convertView.setTag(adapterView);
        }else {
            adapterView = (ListAdapterView) convertView.getTag();
        }
        //赋值
        UserModel m= list.get(position);
        adapterView.icon.setBackgroundResource(m.getIconint());
        adapterView.name.setText(m.getName());
        adapterView.age.setText(m.getAge()+"");

        return convertView;
    }


    public ListViewAdapter(Context context, List<UserModel> list) {
        this.list = list;
        this.context = context;
    }

    static class ListAdapterView  {
        private ImageView icon ;
        private TextView name ;
        private TextView age ;
    }
}

在构建public View getView(int position, View convertView, ViewGroup parent)函数时,创建一个名为view_adapter.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="120dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:id="@+id/icon"
        android:background="@mipmap/ic_launcher"
        android:layout_marginRight="20dp"
        android:layout_marginLeft="10dp"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/icon"
        android:layout_centerVertical="true"
        android:id="@+id/name"
        android:text="Name"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/name"
        android:layout_toRightOf="@+id/icon"
        android:id="@+id/age"
        android:text="age"
        />
</RelativeLayout>

此时,返回到MainActivity,java类,代码:

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private ListView listView ;

    private ListViewAdapter listViewAdapter ;

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

        textView = (TextView) findViewById(R.id.text);
        listView = (ListView) findViewById(R.id.listview);

        textView.setText("代码展示ListView的实例:");
        List<UserModel> list = new ArrayList<>();
        for (int i = 0 ; i<20;i++){
            UserModel m = new UserModel();
            m.setAge(i);

            switch (i%5){
                case 0:
                    m.setIconint(R.mipmap.a);
                    break;
                case 1:
                    m.setIconint(R.mipmap.b);
                    break;
                case 2:
                    m.setIconint(R.mipmap.c);
                    break;
                case 3:
                    m.setIconint(R.mipmap.d);
                    break;

                default:
                    m.setIconint(R.mipmap.a);
                    break;
            }

            m.setName("第"+i+"个");
            list.add(m);
        }
        listViewAdapter = new ListViewAdapter(this,list);
        listView.setAdapter(listViewAdapter);
    }
}

添加资源文件在mipmap中,四张图片分别是a.png、b.png、c.png、d.png

运行结果:如图:

代码下载地址:

http://download.csdn.net/detail/flytosky_l/9759955

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果要实现 Android ListView 的一行多列布局,可以借助于自定义 Adapter 来实现。 首先,在布局文件定义每个列表项的布局,可以使用 LinearLayout、RelativeLayout 或者 GridLayout 等布局来实现一行多列的效果。例如,下面的示例使用 GridLayout 布局,每个列表项包含一个图片和一个文本: ```xml <GridLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:rowCount="1" android:columnCount="2"> <ImageView android:id="@+id/item_image" android:layout_width="50dp" android:layout_height="50dp" android:layout_row="0" android:layout_column="0"/> <TextView android:id="@+id/item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_row="0" android:layout_column="1"/> </GridLayout> ``` 然后,在自定义的 Adapter 重写 getView() 方法,将每个列表项的数据绑定到对应的布局。例如,下面的示例使用 BaseAdapter 来实现自定义的 Adapter: ```java public class MyAdapter extends BaseAdapter { private List<MyItem> mData; public MyAdapter(List<MyItem> data) { mData = data; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView == null) { view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item, parent, false); holder = new ViewHolder(); holder.image = (ImageView) view.findViewById(R.id.item_image); holder.text = (TextView) view.findViewById(R.id.item_text); view.setTag(holder); } else { view = convertView; holder = (ViewHolder) view.getTag(); } MyItem item = mData.get(position); holder.image.setImageResource(item.getImageId()); holder.text.setText(item.getText()); return view; } private static class ViewHolder { ImageView image; TextView text; } } ``` 这里的 MyItem 是一个自定义数据类型,包含图片和文本的资源 ID,例如: ```java public class MyItem { private int mImageId; private String mText; public MyItem(int imageId, String text) { mImageId = imageId; mText = text; } public int getImageId() { return mImageId; } public String getText() { return mText; } } ``` 最后,在 Activity 将自定义的 Adapter 设置给 ListView 即可: ```java List<MyItem> data = new ArrayList<>(); data.add(new MyItem(R.drawable.image1, "Text 1")); data.add(new MyItem(R.drawable.image2, "Text 2")); data.add(new MyItem(R.drawable.image3, "Text 3")); MyAdapter adapter = new MyAdapter(data); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值