ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2020-11-30 关于ListView的一个小小的实验

2020-11-30 09:57:29  阅读:170  来源: 互联网

标签:11 int Adapter 30 list item flag 2020 id


ListView
基本上可以分为三步走战略

  1. 把Activity整好
  2. 把Item整好
  3. 把适配器整好

把Activity整好

ListView
写个id,然后把ListView放好就完事儿了。

把Item放好

这个Activity的样式是这样的,首先是一个大的Activity,里面有个ListView控件,然后每个ListView里面有一堆子的结点,就好比一个结构体数组,整体是一个数组,里面是一个又一个的结构体
现在要做的就是把这个结构体Item定义好,首先要做的还是他们的样式
在这里插入图片描述
这里一定要记得修改maxHight,这样保证Item的尺寸,这里我随便取了一个数字是100dp
这三个元素的id记好,之后会用。
(之后会用,不代表所有的Adapter都会用,ArrayAdapter不会用这个的)

布局文件做好了,接下来要做的就是想办法在java文件里放置内容了。

Adapter整好

这里就是要做代码的地方了,因为主要是adapter部分不明白,所以,那就好好说一下这里。
首先要在这个类声明两个东西
一个是listView,另一个是flag,用于分别调试不同样式的Adapter

public class ListViewTestActivity extends AppCompatActivity {
    int flag;               // 这里设置flag是为了把三种Adapter都演示一遍,
    ListView listView;      // 声明
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view_test);
        listView = findViewById(R.id.list_view_1);      // 实现类的对象listview
        this.flag = 1;
        // 每种Adapter都对应着不同的数据结构和方式下面就逐一演示
        if(flag == 1){
            // #code1
        }
        else if(flag == 2){
			// #code2
        }
        else{
        	// #code3
        }
    }
}
ArrayAdapter

这是一种最简单的Adapter,里面只能放一个数组样式的数据,直接展示,不能多添加什么。

其绑定无法使用自定义的Item,所以我们这里只能直接放进去,这里我随便写了点文字,然后放进去

// #code1
// arrayAdapter  数据结构:数组
            //
            String data[] = {"东临碣石","以观沧海", "水何澹澹", "山岛竦峙", "树木丛生", "百草丰茂", "秋风萧瑟", "洪波涌起", "日月之行", "若出其中",
                    "星汉灿烂", "若出其里", "幸甚至哉", "歌以咏志"};
            ArrayAdapter arrayAdapter = new ArrayAdapter(this/*context代表当前*/,android.R.layout.simple_list_item_1/*这个是固定的*/,data/*数据放这里*/);
            listView.setAdapter(arrayAdapter);          // listview绑定适配器

最终结果
在这里插入图片描述
这就是ArrayAdapter的实现了,非常简单,但是元素过于简单了,所以一般没什么用

simpleAdapter

这个就稍微有点用处了。
这个可以与你实际需要用的item样式联系起来了。

// #code2
// 初始化数据
            ArrayList<Map<String,Object>> lists = new ArrayList<>();        // 这个才是数据源
            String data1[] = {"东临碣石","以观沧海", "水何澹澹", "山岛竦峙", "树木丛生", "百草丰茂", "秋风萧瑟", "洪波涌起", "日月之行", "若出其中",
                    "星汉灿烂", "若出其里", "幸甚至哉", "歌以咏志"};
            String data2[] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14"};

            // item绑定的数组
            int itemList[] = {R.id.textView3,R.id.textView6};   // item里元素对应的id组成的数组
            String typeList[] = {"number","data"};              // map对应元素组成的列表

            // for循环构建数组
            for(int i=0;i<Math.min(data1.length,data2.length);i++){
                Map<String,Object> tempMap = new HashMap<>();       // 存储用
                tempMap.put("number",data2[i]);
                tempMap.put("data",data1[i]);
                lists.add(tempMap);     // 通过for循环构建数组ArrayList lists
            }

            // 绑定和注册Adapter
            SimpleAdapter simpleAdapter = new SimpleAdapter(ListViewTestActivity.this,lists/*数据*/,R.layout.activity_item_of_list/*你用的是什么item就绑什么*/,
                    typeList,itemList);
            listView.setAdapter(simpleAdapter);     // 绑定适配器

在这里插入图片描述
可以看出,这个相比ArrayAdapter就进步了很多,可以自定义item了,重点是里面的代码注释,加的很清楚了,仔细看代码吧。

BaseAdapter的修改

这种方式就比较复杂了,因为你需要自己写Adapter
这个其实有很多介绍,而且修改比较繁琐,里面的Adapter需要自己设置。

  • 就是这个就不写了…因为要改好多,这个是一个比较大的话题,好麻烦…
    大概找一个类似的项目吧

    这里就是一个自己写的Adapter继承了BaseAdapter

需要重载

	public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
     public View getView(int position, View convertView, ViewGroup parent) 

这四个函数
以及构造函数
最重要的是第四个getView,里面用到了viewHolder这个比较麻烦
同时还需要定义子类ViewHolder。挺繁琐的,

整个Activity的文件

package com.example.homework;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class ListViewTestActivity extends AppCompatActivity {
    int flag;               // 这里设置flag是为了把三种Adapter都演示一遍,
    ListView listView;      // 声明
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view_test);
        listView = findViewById(R.id.list_view_1);      // 实现类的对象listview

        this.flag = 2;
        // 每种Adapter都对应着不同的数据结构和方式下面就逐一演示
        if(flag == 1){
            // arrayAdapter  数据结构:数组
            //
            String data[] = {"东临碣石","以观沧海", "水何澹澹", "山岛竦峙", "树木丛生", "百草丰茂", "秋风萧瑟", "洪波涌起", "日月之行", "若出其中",
                    "星汉灿烂", "若出其里", "幸甚至哉", "歌以咏志"};
            ArrayAdapter arrayAdapter = new ArrayAdapter(this/*context代表当前*/,android.R.layout.simple_list_item_1/*这个是固定的*/,data/*数据放这里*/);
            listView.setAdapter(arrayAdapter);          // listview绑定适配器
        }
        else if(flag == 2){
            // 初始化数据
            ArrayList<Map<String,Object>> lists = new ArrayList<>();        // 这个才是数据源
            String data1[] = {"东临碣石","以观沧海", "水何澹澹", "山岛竦峙", "树木丛生", "百草丰茂", "秋风萧瑟", "洪波涌起", "日月之行", "若出其中",
                    "星汉灿烂", "若出其里", "幸甚至哉", "歌以咏志"};
            String data2[] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14"};

            // item绑定的数组
            int itemList[] = {R.id.textView3,R.id.textView6};   // item里元素对应的id组成的数组
            String typeList[] = {"number","data"};              // map对应元素组成的列表

            // for循环构建数组
            for(int i=0;i<Math.min(data1.length,data2.length);i++){
                Map<String,Object> tempMap = new HashMap<>();       // 存储用
                tempMap.put("number",data2[i]);
                tempMap.put("data",data1[i]);
                lists.add(tempMap);     // 通过for循环构建数组ArrayList lists
            }

            // 绑定和注册Adapter
            SimpleAdapter simpleAdapter = new SimpleAdapter(ListViewTestActivity.this,lists/*数据*/,R.layout.activity_item_of_list/*你用的是什么item就绑什么*/,
                    typeList,itemList);
            listView.setAdapter(simpleAdapter);     // 绑定适配器

        }
        else{
			// #code3  BaseAdapter 鸽了....
        }




    }


}

标签:11,int,Adapter,30,list,item,flag,2020,id
来源: https://blog.csdn.net/zakahan/article/details/110366221

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有