listview控件用法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了listview控件用法?相关的知识,希望对你有一定的参考价值。

使用ListView控件的属性。首先我们在创建好的window窗体中拖入一个ListView控件。在columns集合里添加我们要显示的盘符C盘,D盘,E盘,图片自己可以网上找添加上,如下图:

添加ImageList控件保存图片。在使用ListView控件,我们需要使用图片,在C#中有个专门保存图片的控件叫ImageList控件,我们把控件拖到窗体里。使用ImageList控件保存的图片通过索引完成。

详细信息视图转换的实现。使用ListView控件和ImageLisrt控件实现下面的效果,对于列标题的实现我们可以在Columns属性框里修改。

使用快捷菜单功能。我们在对电脑资源管理器进行试图切换时,经常使用右键各项功能。我们在工具栏里拖入一个ContextMenuStrip控件在窗体上,添加名称:大图标,小图标,详细信息。

使用代码向ListView中添加数据。使用代码实现动态的添加数据然后当视图切换到详细烈表示显示如下的效果,先分析如何实现呢?

实现动态向ListView添加数据步骤。上面使用的是静态手动填写的数据,我们如何使用代码动态添加数据呢,步骤是怎样实现的呢?大家看看实现的步骤:

设置ListView的视图。当我们添加完数据后,我们需要设置ListView的视图这样我们才能在ListView空间上看到显示的数据。

创建项,添加项和子项。使用方法动态添加数据,我们在ListView中使用add()方法实现添加数据的功能
参考技术A ListView1.View = View.SmallIcon
        ListView1.View = View.Details
        ListView1.View = View.LargeIcon
        ListView1.View = View.List

本回答被提问者采纳
参考技术B 哪个框架的listview 参考技术C 采纳之后我告诉你

Android学习总结(十三) ———— ListView 简单用法

一、ListView的基本概念

  在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了。即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更多,ListView都不会发生崩溃,而且随着我们手指滑动来浏览更多数据时,程序所占用的内存竟然都不会跟着增长。

二、示例代码

  定义一个实体类,作为ListView适配器的适配类型,代码如下所示:

package com.nyl.listviewtest;


public class SkinCare {
    private String name;
    private String efficacy; //功效
    private int icon; //图标

    public SkinCare(String name, String efficacy, int icon) {
        this.name = name;
        this.efficacy = efficacy;
        this.icon = icon;
    }

    public String getName() {
        return name;
    }

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

    public String getEfficacy() {
        return efficacy;
    }

    public void setEfficacy(String efficacy) {
        this.efficacy = efficacy;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }
}

  自定义一个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="120dp"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/ivSkinCare"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

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

        <TextView
            android:id="@+id/tvName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="all"
            android:textSize="15dp"/>
        <TextView
            android:id="@+id/tvEfficacy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>


</LinearLayout>

  创建一个自定义的适配器,这个适配器继承自ArrayAdapter,并将泛型指定为SkinCare这个实体类,新建SkinCareAdapter类,代码如下所示:

package com.nyl.listviewtest;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Administrator on 2017/3/9 0009.
 */

public class SkinCareAdapter extends ArrayAdapter<SkinCare> {

    private int resourceId;


    public SkinCareAdapter(Context context, int resource, List<SkinCare> objects) {
        super(context, resource, objects);
        resourceId = resource;
    }

    /**
     * 这个方法在每个子项被滚动到屏幕内的时候调用
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //通过getItem()方法得到当前SkinCare的实例
        SkinCare skinCare = getItem(position);

        /**
         * 提高ListView的运行效率,在快速滚动的时候也可以表现出更好的性能
         */

        //使用ViewHolder来优化
        ViewHolder viewHolder;

        //判断convertView 为空
        if (convertView == null) {
            //如果为空使用LayoutInflater去加载布局
            convertView = LayoutInflater.from(getContext()).inflate(resourceId, null);

            viewHolder = new ViewHolder();
            viewHolder.ivSkinCare = (ImageView) convertView.findViewById(R.id.ivSkinCare);
            viewHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
            viewHolder.tvEfficacy = (TextView) convertView.findViewById(R.id.tvEfficacy);
            //将ViewHolder存储在View中
            convertView.setTag(viewHolder);
        } else {
            //如果不为空直接对convertView进行重用
            //重新获取ViewHolder
            viewHolder = (ViewHolder) convertView.getTag();
        }


      /*  //使用LayoutInflater来加载传入的布局(这种写法运行效率是很低)
        View view = LayoutInflater.from(getContext()).inflate(resourceId,null);
        *//**
         * 调用View的findViewById()方法来获取布局控件
         *//*
        ivSkinCare = (ImageView) view.findViewById(R.id.ivSkinCare);
        tvName = (TextView) view.findViewById(R.id.tvName);
        tvEfficacy = (TextView) view.findViewById(R.id.tvEfficacy);

        //调用setImageResource()方法来设置显示的图片
        ivSkinCare.setImageResource(skinCare.getIcon());
        //设置护肤品的名字
        tvName.setText(skinCare.getName());
        //设置护肤品的功效
        tvEfficacy.setText(skinCare.getEfficacy());*/


        viewHolder.ivSkinCare.setImageResource(skinCare.getIcon());
        viewHolder.tvName.setText(skinCare.getName());
        viewHolder.tvEfficacy.setText(skinCare.getEfficacy());
        //将布局返回
        return convertView;
    }
        static class ViewHolder {
            ImageView ivSkinCare;
            TextView tvEfficacy;//护肤品的功效
            TextView tvName; //护肤品名
        }

}

  代码注释得很详细,不过多解释,接下编写MainActivity,代码如下所示:

package com.nyl.listviewtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity implements AdapterView.OnItemClickListener {

    private List<SkinCare> skinCare = new ArrayList<>();
    private SkinCareAdapter skinCareAdapter;
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initSkinCare(); //初始化所有的护肤品数据
        skinCareAdapter = new SkinCareAdapter(MainActivity.this,R.layout.skin_care,skinCare);


        //初始化布局控件
        lv = (ListView) findViewById(R.id.lv);
        lv.setAdapter(skinCareAdapter);

        //设置setOnItemClickListener()方法来为ListView注册一个监听器
        lv.setOnItemClickListener(this);

    }

    /**
     * 当用户点击了ListView中任何一个子项时,就会回调onItemClick()方法,在这个方法中可以通过i参数判断出用户点击的哪一个
     * 子项,然后获取到相应的护肤品,通过Toast将护肤品的名字显示出来。
     */
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        SkinCare sc = skinCare.get(i);
        Toast.makeText(MainActivity.this,sc.getName(),Toast.LENGTH_SHORT).show();
    }


    /**
     * 构造函数中将护肤品的名字,功效和对应的图片id传入,然后把创建好的对象添加到护肤品列表中
     */
    private void initSkinCare() {
        SkinCare cleansingMilk = new SkinCare("洗面奶","基础清洁",R.mipmap.skin_care);
        skinCare.add(cleansingMilk);

        SkinCare toner = new SkinCare("爽肤水","二次清洁,深层补水",R.mipmap.skin_care);
        skinCare.add(toner);

        SkinCare essence = new SkinCare("精华液","集中解决肌肤某个问题,由内而外修复肌肤",R.mipmap.skin_care);
        skinCare.add(essence);

        SkinCare eyeCream = new SkinCare("眼霜","舒缓眼部疲劳,改善眼部肤色",R.mipmap.skin_care);
        skinCare.add(eyeCream);

        SkinCare latex  = new SkinCare("乳液","给皮肤补充充足的营养,激活肌肤细胞,形成胶原蛋白",R.mipmap.skin_care);
        skinCare.add(latex );

        SkinCare faceCream  = new SkinCare("面霜","不断给肌肤补充充足的水分和养分,使肌肤保持润泽状态",R.mipmap.skin_care);
        skinCare.add(faceCream );

        SkinCare mask  = new SkinCare("面膜","清透毛孔,清楚表皮污垢,黑头,死细胞",R.mipmap.skin_care);
        skinCare.add(mask );

        SkinCare sunScreen  = new SkinCare("隔离霜","全面隔离紫外线、灰尘、尼古丁、电脑辐射等有害物质对皮肤造成伤害",R.mipmap.skin_care);
        skinCare.add(sunScreen );

        /**
         * 第二种写法
         */
        /*LinkedList<SkinCare> data = new LinkedList<>();
        data.add(new SkinCare("洗面奶","基础清洁",R.mipmap.skin_care));*/
    }


}

  运行程序,并点击一下精华液,效果如下:

  

  简单的ListView知识就学到这里,更多的知识点下节继续!

以上是关于listview控件用法?的主要内容,如果未能解决你的问题,请参考以下文章

父控件的点击事件被Recyclerview拦截

Android listview 的用法? 越详细越好。

2Android-UI(自定义控件&ListView)

listview 控件

Android 在listview里itme中有imagebutton 怎么监听这个button?

VS中dataGridView控件和ListView(View属性为Details;GridLines属性为true)控件在实现表格时候有什么不同?