Android课程---优化ListView列表视图(2)

layout_simple.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="wrap_content">
    <ImageView
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@drawable/yuantu"
        android:id="@+id/lv2"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="20dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="美食图片"
            android:id="@+id/tv1"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="很好吃啊"
            android:id="@+id/tv2"/>

    </LinearLayout>

</LinearLayout>

activity_ui5.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv_2">

</ListView>

UIActity.java

package com.hanqi.test5;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
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 UIActivity5 extends AppCompatActivity
{

    //数据源
    //List<Map<String,Object>> lm;
    List<Food> lf;

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

        //获取ListView
        ListView lv_2 =(ListView)findViewById(R.id.lv_2);
        //准备数据源
        lf = new ArrayList<Food>();
        lf.add(new Food(R.drawable.yuantu,"内容1","美食1"));
        lf.add(new Food(R.drawable.yuantu,"内容2","美食2"));
        lf.add(new Food(R.drawable.yuantu,"内容3","美食3"));
        lf.add(new Food(R.drawable.yuantu,"内容4","美食4"));
       /* lm =new ArrayList<Map<String,Object>>();
        Map<String,Object> map = new Hashtable<String, Object>();

        map.put("image",R.drawable.yuantu);
        map.put("name","美食图片01");
        map.put("content","很好吃啊01");
        lm.add(map);

        map = new Hashtable<String, Object>();
        map.put("image",R.drawable.yuantu);
        map.put("name","美食图片02");
        map.put("content","很好吃啊02");
        lm.add(map);

        map = new Hashtable<String, Object>();
        map.put("image",R.drawable.yuantu);
        map.put("name","美食图片03");
        map.put("content","很好吃啊03");
        lm.add(map);

        map = new Hashtable<String, Object>();
        map.put("image",R.drawable.yuantu);
        map.put("name","美食图片04");
        map.put("content","很好吃啊04");
        lm.add(map);*/

        lv_2.setAdapter(new MyBaseAdapter());

    }
    class MyBaseAdapter extends BaseAdapter
    {
        //获取要显示的行数
        @Override
        public int getCount()
        {

            return lf.size();
        }

        //获取对应下标的行
        @Override
        public Object getItem(int position)
        {
            return lf.get(position);
        }
        //获取对应行的id
        @Override
        public long getItemId(int position)
        {
            return position;
        }
        //给视图适配数据,返回视图
        //3个参数:1.position(数据的下标)
        //2.convertView(可重复使用的视图)
        //3.parent(父视图)
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            //如果convertView为空,就加载layout文件
            if (convertView == null)
            {
            Log.e("TAG","position = "+position);

            //1.获取样式文件(layout文件)
            LayoutInflater layoutInflater = getLayoutInflater();
                convertView = layoutInflater.inflate(R.layout.layout_simple, null);
            }
            //2.数据和layout文件的视图组件进行绑定
            //1)从数据源里获取一行数据
            //Map<String,Object> map = lm.get(position);

            Food food = lf.get(position);

            //2)获取layout文件的视图组件
            ImageView iv_2 = (ImageView)convertView.findViewById(R.id.lv2);
            TextView tv1 = (TextView)convertView.findViewById(R.id.tv1);
            TextView tv2 = (TextView)convertView.findViewById(R.id.tv2);

            //3)绑定(数据适配)
//            iv_2.setImageResource((int) map.get("image"));
//            tv1.setText(map.get("name").toString());
//            tv2.setText(map.get("content").toString());

            iv_2.setImageResource((int) food.getImage());
            tv1.setText(food.getName());
            tv2.setText(food.getContent());

            //3.返回视图
            return convertView;
        }
    }
}

效果图:

时间: 2024-10-10 23:46:08

Android课程---优化ListView列表视图(2)的相关文章

Android课程---优化ListView列表视图

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

Android课程---关于ListView列表视图的学习

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

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

步步为营_Android开发课[19]_用户界面之ListView(列表视图)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之ListView(列表视图) -ListView和TextView,Button等控件一样,一样的定义方式和显示方式,所以不再重复学了.但是Android开发中ListView经常适配一些适配器来显示,所以我们要学重点是是ListView的各种适配. List

Qt qml中listview 列表视图控件(下拉刷新、上拉分页、滚动轴)

Qt qml中listview 列表视图控件(下拉刷新.上拉分页.滚动轴) 来源 https://www.cnblogs.com/surfsky/p/4352898.html 设置ListView涉及到将contentsY,即视图的可见部分的顶部,设置y为委托的值.另一个更改是interactive将视图设置为false.这样可以防止视图移动.用户不能再滚动列表或更改当前Item. contentY为列表上拉后列表左上角点距显示框左上解点的高度listView1.height为可显示部分的高度,

Android - ViewHolder优化ListView

在Android开发中, ListView是重要的组件, 它以列表形式根据数据的长度, 自适应展示具体内容. 用户可以自由的定义ListView每一列的布局. 当listview有大量数据需要加载的时候, 会占据内存, 影响性能. 这时候就需要按需填充, 并重新使用View, 减少对象的创建. ListView加载数据都是在getView()方法中进行. 同时, 需要自定义ListView重写ListAdapter: 如BaseAdapter, SimpleAdapter, CursorAdap

Android性能优化--Listview优化

ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项.如果你的getCount()返回

windows窗体控件之listview列表视图

1.添加标题 winform.listview.gridLines=true;//显示列表线,也可在属性表设置 winform.listview.insertColumn("列标题",列宽,位置,样式) winform.listview.insertColumn("标题2",列宽,位置,样式)//后加的在前面(若不注明位置) winform.listview.insertColumn("第一列", 40, 1); winform.listview

第二章实例:ArrayAdapter结合ListView列表视图

package mydefault.packge; import com.example.codeview.R; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import a