美文网首页Android旅途
Android数据列表之ListView的使用

Android数据列表之ListView的使用

作者: 朝阳小麦 | 来源:发表于2018-09-26 11:03 被阅读81次

适用人群:Android开发人员。
本文内容:简要介绍ListView&GridView的使用,为后续RecycleView的使用介绍打基础。

备注:
1.Android数据列表之GridView的使用:https://www.jianshu.com/p/9aa90798c1fb
2.Android数据列表之RecycleView的使用:https://www.jianshu.com/p/db00eed833cf

总文件目录如下图 & 界面效果如下图 如下:
总文件目录如下图 界面效果如下图
ListView工程目录.png ListView界面效果.jpg
项目实现步骤:

1)新建工程,选择有一个Activity,默认名称为MainActivity,默认布局为activity_main.xml;
2)新建一个item样式。文件名为layout_list_item.xml,示例代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp">

    <ImageView
        android:id="@+id/image"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginRight="10dp"
        android:src="@mipmap/ic_launcher"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:textColor="#333333"
            android:text="标题"/>

        <TextView
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="14sp"
            android:textColor="#666666"
            android:text="内容"
            android:layout_marginTop="5dp"/>
    </LinearLayout>

</LinearLayout>

3)ListView的内容的展示,需要在适配器中补充。包括GridView、RecycleView也是如此,需要对应一个适配器。这就像iOS中UITableView的UITableViewDataSource。
新建ListAdapter文件,继承BaseAdapter。需要重写一些必要的方法,例如:getCount()、getView(int position, View convertView, ViewGroup parent)等。
item重用机制:借用ViewHolder类实现重用,优化性能。
示例代码如下:

package com.qiao.apple.listviewdemo;

import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

public class ListAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mLayoutInflater;

    public ListAdapter(Context context) {
        mContext = context;
        mLayoutInflater = LayoutInflater.from(mContext);
    }


    @Override
    public int getCount() {
        return 10;
    }

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

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

    static class ViewHolder {
        public ImageView imageView;
        public TextView title;
        public TextView content;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        if (null == convertView) {
            convertView = mLayoutInflater.inflate(R.layout.layout_list_item, null);
            viewHolder = new ViewHolder();
            viewHolder.imageView = convertView.findViewById(R.id.image);
            viewHolder.title = convertView.findViewById(R.id.title);
            viewHolder.content = convertView.findViewById(R.id.content);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
//        viewHolder.imageView.setImageResource(R.mipmap.ic_launcher);
        Glide.with(mContext)
                .load(R.mipmap.ic_launcher_round)//加载默认图
                .load("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png")
                .into(viewHolder.imageView);
        viewHolder.title.setText("啦啦啦我是标题"+position);
        viewHolder.content.setText("啦啦啦我是内容"+position);
        return convertView;
    }
}

4)补充activity_main.xml文件。添加一个ListView控件。
示例代码如下:

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

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:dividerHeight="2dp"
        android:listSelector="@drawable/list_selector_style"
        />

</LinearLayout>

5)补充MainActivity文件。获取刚刚创建的ListView控件,并绑定点击事件以及适配器。
示例代码如下:

public class MainActivity extends AppCompatActivity {

    ListView listView;

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

        listView = this.findViewById(R.id.list_view);
        listView.setOnItemClickListener(new ListViewClick());
        listView.setAdapter(new ListAdapter(MainActivity.this));

    }

    private class ListViewClick implements AdapterView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int
                position, long id) {
            Log.d("qiao", "当前点击数据position是:" + position);
            Toast.makeText(MainActivity.this, "当前点击数据position是:" + position,
                    Toast.LENGTH_SHORT).show();
        }
    }
}

代码完成。

相关文章

网友评论

    本文标题:Android数据列表之ListView的使用

    本文链接:https://www.haomeiwen.com/subject/zbeesftx.html