`
wangxinxin1212
  • 浏览: 29775 次
社区版块
存档分类
最新评论

android ListView 及adapterView的使用

阅读更多

ListView是android常用的组件之一,经常会在滑动侧边栏,商品列表等。使用ListView一般有以下5种方式

  • 使用资源数组
  • 使用ArrayAdapter
  • 使用SimpleAdapter
  • 继承BaseAdapter
  • 继承ListActivity

一.使用资源数组

这种方式非常简单,但是显示比较单一,只适合简单的业务需求。

使用方法:

1.在资源文件中定义数组

<resources>
    <array name="main_array">
        <item>基于数组</item>
        <item>ArrayAdapter 方式</item>
        <item>SimpleAdapter 方式</item>
        <item>BaseAdapter 方式</item>
    </array>
</resources>

 2.在布局文件中创建ListView标签,并使用entries属性引入数组

<ListView
        android:id="@+id/main_listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/main_array">

    </ListView>

 3.绑定点击事件

mainListView = (ListView) findViewById(R.id.main_listView);
        final String[] array = getResources().getStringArray(R.array.main_array);
        mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置点击触发方法
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position){
                    case 0 :
                        Toast.makeText(getApplication(),"当前页面便是使用数组生成的ListView",Toast.LENGTH_SHORT).show();
                        break;
                    case 1 :
                        startActivity(new Intent(getApplicationContext(), ArrayAdapterTest.class));//打开新的activity
                        break;
                    case 2 :
                        startActivity(new Intent(getApplicationContext(), SimpleAdapterTest.class));//打开新的activity
                        break;
                    case 3 :
                        startActivity(new Intent(getApplicationContext(), BaseAdapterTest.class));//打开新的activity
                        break;
                }
            }
        });

 二.使用ArrayAdapter

 用户需定义item显示布局

使用方法:

1.创建ListView标签

<LinearLayout 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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.xinxin.adaptertest.ArrayAdapterTest">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/array_adapter_h1"
        android:layout_margin="10dp"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="绿色分割线"
        android:layout_margin="10dp"
        />
<!-- 显示普通列表 -->
    <ListView
        android:id="@+id/arrayAdapterTestListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#0f0"
        android:dividerHeight="2px"
        android:headerDividersEnabled="false"
        android:layout_margin="10dp"
        >
    </ListView>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="红色分割线"
        android:layout_margin="10dp"
        />
<!-- 显示带checkbox的列表 -->
    <ListView
        android:id="@+id/arrayAdapterTestListView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#ff3f1d"
        android:dividerHeight="2px"
        android:headerDividersEnabled="false"
        android:layout_margin="10dp"
        >
    </ListView>
</LinearLayout>

 2.创建显示item布局

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:textSize="25sp">

</TextView>

 3.activity代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_array_adapter_test);
        listView = (ListView) findViewById(R.id.arrayAdapterTestListView);
        listView1 = (ListView) findViewById(R.id.arrayAdapterTestListView1);
        List<String> list = new ArrayList<String>();
        for(int i=0; i<5; i++){
            list.add("green:item"+i);
        }
        //创建ArrayAdapter实例
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.array_adapter_test_item, list);
        //为ListView添加adapter
        listView.setAdapter(arrayAdapter);
        //为每个元素绑定点击方法
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                System.out.println(position);
                TextView tv = (TextView) view;
                Toast.makeText(getApplication(), "您点击了:" + tv.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });
        //为每个元素绑定选择方法
        listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                TextView tv = (TextView) view;
                Toast.makeText(getApplication(), "您选择了:"+tv.getText().toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        list = new ArrayList<String>();
        for(int i=0; i<5; i++){
            list.add("red:item"+i);
        }

        arrayAdapter = new ArrayAdapter<String>(this, R.layout.select_dialog_multichoice_material, list);//设置多选列表,使用android自带布局

        listView1.setAdapter(arrayAdapter);

        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//处理checkbox勾选
                CheckedTextView checkedTextView = (CheckedTextView) view;
                if(checkedTextView.isChecked()){
                    checkedTextView.setChecked(false);
                }else{
                    checkedTextView.setChecked(true);
                }
            }
        });

    }

 三.使用SimpleAdapter

评价最多的一句话“简单而不简单”,使用SimpleAdapter可以创建自定义的显示方式

使用方法:

1.定义布局,只需在主布局中放入一个简单的ListView

<ListView
        android:id="@+id/simpleAdapterListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp">

    </ListView>

 2.定义item显示布局,注意logoImage,name, desc这三个控件,在第三步中会使用到。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_margin="10dp">

    <ImageView
        android:id="@+id/logoImage"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_margin="10dp"/>

    <TextView
        android:id="@+id/desc"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_margin="10dp"/>
</LinearLayout>

 

 

 3.activity代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_adapter);
        listView = (ListView) findViewById(R.id.simpleAdapterListView);

        int[] logoIds = new int[]{R.drawable.p1, R.drawable.p2};
        String[] names = new String[]{"元素1", "元素2"};
        String[] descs = new String[]{"这是测试元素1","这是测试元素2"};
        List<Map<String, Object>> list =  new ArrayList<Map<String, Object>>();
        for (int i=0; i<2; i++){
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("logoImage", logoIds[i]);
            map.put("name", names[i]);
            map.put("desc", descs[i]);
            list.add(map);
        }

        //实例化SimpleAdapter
        SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_simple_adapter_item
                , new String[]{"logoImage","name","desc"}, new int[]{R.id.logoImage, R.id.name, R.id.desc});

        listView.setAdapter(simpleAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                LinearLayout line = (LinearLayout) view;
                TextView textView = (TextView) line.getChildAt(1);
                Toast.makeText(getApplication(), "您点击了:"+textView.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });

    }

 

 四.BaseAdapter

需要继承BaseAdapter,并实现抽象方法,用户可以高度控制。

使用方法:

1.在主布局中创建ListView

<ListView
        android:id="@+id/baseAdapterListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        ></ListView>

 2.编写activity代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base_adapter_test);
        listView = (ListView) findViewById(R.id.baseAdapterListView);
        BaseAdapter baseAdapter = new BaseAdapter() {//继承BaseAdapter,并实现抽象方法
            @Override
            public int getCount() {//元素个数
                return 10;
            }
            @Override
            public Object getItem(int position) {
                return null;
            }
            @Override
            public long getItemId(int position) {
                return position;
            }
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                LinearLayout linearLayout = new LinearLayout(BaseAdapterTest.this);//创建线性布局
                linearLayout.setOrientation(LinearLayout.HORIZONTAL);
                ImageView imageView = new ImageView(BaseAdapterTest.this);//创建图片布局
                imageView.setImageResource(R.drawable.p1);
                linearLayout.addView(imageView);
                TextView textView = new TextView(BaseAdapterTest.this);//常见TextView布局
                textView.setText("item"+position);
                linearLayout.addView(textView);
                return linearLayout;
            }
        };
        listView.setAdapter(baseAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//处理点击事件
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                LinearLayout linearLayout  = (LinearLayout) view;
                TextView textView = (TextView) linearLayout.getChildAt(1);
                Toast.makeText(getApplication(), "您点击了:"+textView.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }

5. 继承ListActivity类似于ArrayAdapter,这里便不再介绍。

 

最后将效果图发上来:

 

 

 

  • 大小: 737.6 KB
0
1
分享到:
评论

相关推荐

    Android listview 分组及折叠分组

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。在某些场景下,我们可能需要将数据按照特定的逻辑进行分组,并且允许用户折叠或展开这些分组,以便更好地管理和浏览数据。本篇文章将深入...

    android listview的使用方法

    本篇文章将深入探讨如何在Android中使用ListView,包括基本配置、适配器(Adapter)的使用以及一些优化技巧。 首先,我们需要在布局文件中添加ListView元素。在XML布局中,你可以这样定义一个ListView: ```xml ...

    android ListView简单用法

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表,用户可以通过滚动查看更多的条目。这个教程将详细介绍Android ListView的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件...

    Android ListView长按删除

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。在许多应用中,我们可能需要添加一些交互性功能,比如长按删除,以增强用户体验。本篇文章将详细...

    android ListView简单示例

    本示例将深入探讨如何在Android应用中使用ListView,包括它的基本使用、适配器(Adapter)机制以及一些高级特性。 1. **ListView的基本使用** - 在XML布局文件中,使用`&lt;ListView&gt;`标签创建ListView。例如: ```...

    android ListView 使用 示例

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常用于实现像通讯录、消息列表等效果。本教程将详细讲解如何在实际项目中使用ListView,并结合源码分析其工作原理。 首先,我们需要...

    android listView 单选 功能

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在许多场景下,我们需要为ListView实现单选功能,即用户点击某一条目后,该条目会被选中并显示选中状态,比如一个对勾图标。本文将详细探讨...

    android ListView简单实例

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,用户可以通过滚动查看所有条目。本教程将深入讲解如何使用ArrayAdapter和SimpleAdapter这两种方式来创建一个简单的ListView实例。 首先,...

    Android listview使用的简单事例

    以下是一个关于如何在Android中使用ListView的简单事例: 第一步:新建`MyListActivity`继承自`ListActivity` 在创建一个基于ListView的活动时,通常会继承`ListActivity`类,因为它为ListView提供了一些便利的方法...

    androidListView下拉刷新Demo

    总结,"androidListView下拉刷新Demo"是一个典型的Android开发实践,涉及到Android UI组件的交互、事件监听、数据加载以及第三方库的使用。通过这样的示例,开发者可以学习如何增强ListView的功能,提供更优的用户...

    Android Activity跳转和listview的使用

    理解Activity的跳转和ListView的使用是Android开发中至关重要的技能。在这个主题中,我们将深入探讨如何通过Intent和Bundle实现Activity间的参数传递和跳转,以及如何在ListView中设置Item的点击事件处理。 首先,...

    android中一个简单的LIstView用法例子

    在Android开发中,...通过实践这个简单的ListView例子,你可以深入理解Android中列表视图的使用,为以后的开发工作打下坚实的基础。在实际项目中,你可能会遇到更复杂的需求,但只要掌握了基本原理,就能灵活应对。

    android listview单击事件

    4. **优化性能**:当ListView包含大量数据时,为了提高性能,应使用convertView在`getView()`中复用已创建的视图。这样可以减少视图的创建和销毁,提高滚动流畅性。 5. **注意点击穿透问题**:有时可能会遇到点击...

    android ListView+CheckBox实现单选

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。当需要在列表项中添加选择功能时,我们通常会结合使用ListView与CheckBox。本篇将详细讲解如何利用这两种组件实现ListView中的单选功能。 ...

    自定义Android的AdapterView

    AdapterView是Android系统中一个非常重要的组件,它是ListView、GridView、Spinner等视图的基础。它提供了将数据集合与视图进行绑定的能力,使得数据能够动态地显示在屏幕上。本篇文章将深入探讨如何自定义Android的...

    android listview 列表 点击列表进入详细页面

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表,具有良好的滚动性能和可定制性。本教程将深入探讨如何实现ListView,并在点击列表项时跳转到详细页面。 一、ListView的基本使用 1. 创建...

    android ListView初级到高级详解

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,用户可以通过滚动来查看更多的条目。本文将从初级到高级详细讲解ListView的使用,包括基础设置、复杂列表的构建、自定义适配器以及如何...

    Android中listView选中第一行,或任意一行,选中后能取消

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。ListView通过适配器(Adapter)将数据绑定到视图上,实现数据与界面的交互。在这个特定的场景下,我们关注的是如何实现ListView的第一行或者...

    android listView

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,可以根据需要展示不同类型的数据,同时提供滚动、点击等交互功能。本篇文章将详细探讨如何在Android中实现一个...

    安卓手机 ListView控件的三种使用方式

    在Android开发中,ListView是应用界面中非常常见的一种控件,它用于展示大量数据的列表形式,具有良好的滚动性能和可扩展性。本教程将详细讲解如何在...熟练掌握ListView的使用,对提升Android应用的用户体验至关重要。

Global site tag (gtag.js) - Google Analytics