ListView入门

实现listview的一般步骤

1.在布局文件中添加xml代码

-添加ListView标签

2.在activity中编写java代码

-获取ListView对象

-准备数据源

-配置适配器

-将适配器关联到ListView

 

使用ArrayAdapter实现文字列表

1.在布局文件中编写代码(xml

-添加ListView标签(main.xml)

2.在activity中编写代码(java

-获取ListView对象

-准备数据源(Array数组)

-配置适配器(ArrayAdapter

-将适配器关联到ListView

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

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/lv"
        android:layout_alignParentTop="true" />
</RelativeLayout>


listView = (ListView) findViewById(lv);
        String[] item = {"1", "2", "3"};
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(
                MainActivity.this,
                android.R.layout.simple_list_item_1,
                item
        );
        listView.setAdapter(adapter);

什么是适配器

为什么要使用适配器?

Adapter实际是一个设计模式,设计模式是什么,就是一种编程经验,编程经验丰富的人觉得程序这么写,会有更好的效果。它就是视图/代码分开的模式。数据--适配器--视图。它是桥梁。它是负责把我们的数据显示到视图。

 

 

使用SimpleAdapter实现图文混编列表

1.在布局文件中编写代码

-添加ListView标签(main.xml

-编写行布局文件(item.xml) 每一个控件都需要ID

2.在Activity中编写代码

-获取ListView对象

-准备数据源(List<Map>) 泛型

-配置适配器(SimpleAdapter)

-将适配器关联到ListView


-编写行布局文件(item.xml) 每一个控件都需要ID

listview_item.xml

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

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/imageViewHeader"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="content"
        android:id="@+id/textViewContent"
        android:layout_above="@+id/textViewTime"
        android:layout_toRightOf="@+id/imageViewHeader"
        android:layout_toEndOf="@+id/imageViewHeader" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="time"
        android:id="@+id/textViewTime"
        android:layout_alignBottom="@+id/imageViewHeader"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>


private ListView listView;
    private int[] ivID={R.drawable.a3i,R.drawable.a3j,R.drawable.a3k,R.drawable.a3l,
            R.drawable.a3m,R.drawable.a3o,R.drawable.a3p,R.drawable.a3r,
            R.drawable.a3s};
    private String[] content={"fgsdgsdf","adsfasdfasd","adsfsadf","asdfadsf",
            "45254245","5354242","7254245","24524287",
            "2312fdf"};
    private String[] time = {"1","2","3","4","5","6","7","8","9"};


 listView = (ListView) findViewById(lv);
        List<Map<String, Object>> maplist = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();


        list = new ArrayList<>();

        for (int i = 0; i < 9; i++) {
            map = new HashMap<>();
            map.put("imageViewHeader", ivID[i]);
            map.put("textViewContent", content[i]);
            map.put("textViewTime", time[i]);
            list.add(map);
        }

        SimpleAdapter adapter=new SimpleAdapter(
                MainActivity.this,
                maplist,
                R.layout.listview_item,
                new String[]{"imageViewHeader","textViewContent","textViewTime"},
                new int[]{R.id.imageViewHeader,R.id.textViewContent,R.id.textViewTime}
        );
        listView.setAdapter(adapter);

当你的行布局中有button的时候,会发现运行到手机,点击listview点不了咯。为什么呢?因为buttonlistview的焦点抢了。所以接下要做的事,是把焦点抢回来。那么怎么抢呢?有个小技巧。

需要在行布局最外父类容器中设置descendantFocusability属性。

 

android:descendantFocusability=”blocksDescendants”



发布了48 篇原创文章 · 获赞 49 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览