`

listview 自定义+监听用法

阅读更多

 本文是关于android的一个自定义listview的学习记录,由于网上的大部分都是只有简单的,所以作者写了一个自定义的,同时其中含有监听器内容,可以针对于一些多选择的情况,首先系统如果要实例化一个listview,就必须有适配器,这个适配器我们就必须自己写,同时数据也必须自己写,这样才能给listview安插数据,此时我们必须重写getview函数,系统会先调用getcount(),然后根据返回的条目调用getview函数,首先我们得将布局做好:有两种:(主布局,以及listview布局)

以下是activity_main.xml

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


        <ListView
            android:id="@+id/listView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" >

        </ListView>

    </RelativeLayout>

 listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white"
    android:orientation="horizontal" >


    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="87dp"
        android:background="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="599dp"
        android:layout_height="88dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="156dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.13"
            android:text="测试文字" />

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.13"
            android:text="测试用例" />
    </LinearLayout>
.



</LinearLayout>

 然后我们将设置数据(在mainActivity里面完成,并且实例化)

MainActivity.java

package com.example;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ListView;

import com.example.listview.R;

/**
 * 程序入口
 * @author lg
 *
 */
public class MainActivity extends Activity{
	private ListView listView=null;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 使得应用全屏显示
		// 隐去标题栏
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 隐去状态栏部分
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.activity_main);
		listView=(ListView)findViewById(R.id.listView1);  
        List<Map<String, Object>> list=getData();  
        listView.setAdapter(new MyAdspter(this, list));
	}
	public List<Map<String, Object>> getData(){  
        List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();  
        for (int i = 0; i < 5; i++) {  
            Map<String, Object> map=new HashMap<String, Object>();  
            map.put("image", R.drawable.test);  
            map.put("title", "测试标题"+i);  
            list.add(map);  
        }  
        return list;  
    }  
	
}

 再然后我们就可以在自己编写的MyAdspter实例化数据(附加监听)

package com.example;

import java.util.List;
import java.util.Map;

import com.example.listview.R;

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

public class MyAdspter extends BaseAdapter{
	private List<Map<String, Object>> data;  
    private LayoutInflater layoutInflater;  
    private Context context;  
    public MyAdspter(Context context,List<Map<String, Object>> data){  
        this.context=context;  
        this.data=data;  
        this.layoutInflater=LayoutInflater.from(context);  
    }
    /** 
     * 组件集合,对应listview.xml中的控件 
     * @author Administrator 
     */  
    public final class ViewHolder{  
        public ImageView image;  
        public TextView title;  
        public Button view;  
    }
    @Override  
    public int getCount() {  
        return data.size();  
    }  
    /** 
     * 获得某一位置的数据 
     */  
    @Override  
    public Object getItem(int position) {  
        return position;  
    }  
    /** 
     * 获得唯一标识 
     */  
    @Override  
    public long getItemId(int position) {  
        return position;  
    } 

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder=null;  
        if(convertView==null){  
            holder=new ViewHolder();  
            //获得组件,实例化组件  
            convertView=layoutInflater.inflate(R.layout.listview, null);  
            holder.image=(ImageView)convertView.findViewById(R.id.imageView1);  
            holder.title=(TextView)convertView.findViewById(R.id.textView1);  
            holder.view=(Button)convertView.findViewById(R.id.button1);  
            convertView.setTag(holder);  
        }else{  
            holder=(ViewHolder)convertView.getTag();  
        }  
        //绑定数据  
        holder.image.setBackgroundResource((Integer)data.get(position).get("image"));  
        holder.title.setText((String)data.get(position).get("title"));  
        final int id=position;
        holder.image.setOnClickListener(new View.OnClickListener() {//给图片添加监听器
			
			@Override
			public void onClick(View v) {
				System.out.println("点击的是第"+id+"张图片");
			}
		});
        
        
        return convertView;  
    }

}

 效果如图:

这是监听输出效果



 
 这样就可以了,附带上传代码

  • 大小: 133.9 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

    Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

    本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。...

    android listview 自定义样式实例

    - 如果需要在ListView的顶部或底部添加额外的视图,如头部广告或页脚提示,可以使用`addHeaderView()`和`addFooterView()`方法。 10. **分组ListView(ExpandableListView)**: - 如果需要更复杂的数据结构,...

    带按钮listview,添加监听

    通过创建自定义布局文件、适配器以及设置按钮监听器,我们可以使ListView的每一项具有交互功能,从而提升应用程序的功能性和用户体验。在实际开发中,可以根据具体需求进行更复杂的定制,例如添加动画、自定义事件...

    自定义ListView+fragment

    **自定义Adapter**:Adapter是连接ListView和数据源的桥梁,你需要创建一个继承自BaseAdapter的类,重写其中的`getCount()`(返回数据项数量)、`getItem()`(获取指定位置的数据)、`getItemId()`(返回指定位置的...

    Android ListView扩展(图片+文字)

    3. 数据绑定:在Adapter中,重写`getView()`方法,这个方法会为ListView的每一项返回一个View。在该方法内,使用LayoutInflater实例化布局文件,然后找到ImageView和TextView,将数据绑定到这些视图上。可以使用...

    自定义ListView解决ListView+EditText焦点的问题

    然后,在自定义的ListView中,我们还需要监听EditText的焦点变化,确保在EditText失去焦点时恢复ListView的正常滚动。可以使用OnFocusChangeListener来实现这一点: ```java public class CustomListView extends ...

    Android 自定义ListView + Gallery 组合

    1. **数据绑定**:Gallery的使用方式与ListView类似,也需要自定义Adapter,但通常只重写`getView()`方法,因为Gallery通常用于展示单行的数据。 2. **循环滚动**:Gallery默认支持无限循环滚动,用户可以设置`...

    Listview+Edittext和ListView+CheckBox

    - 使用`SimpleAdapter`或`BaseAdapter`的子类来处理EditText,需要重写`getView()`方法,为特定位置的列表项设置EditText,并监听其文本变化事件。 3. **EditText在ListView中的注意事项**: - 由于ListView的...

    android ListView子控件监听

    如果需要监听用户在ListView子项上的滑动手势,可以使用SwipeRefreshLayout包裹整个ListView,或者使用第三方库如`SwipeToDismissListViewTouchListener`来实现这个功能。 通过以上方式,开发者可以灵活地为...

    自定义listview的item控件

    通常在`getView()`里,我们可以给View添加OnClickListener,或者使用`setOnItemClickListener()`在ListView上设置监听器。事件处理时,我们通常通过`position`参数来确定是哪个Item被点击。 7. **优化策略**: ...

    ListView 表格+ 翻页

    在ListView中,我们可以监听`OnScrollListener`的`onScrollStateChanged()`方法,当用户停止滚动时,检查是否到达了列表底部,如果达到,则请求加载更多数据: ```java listView.setOnScrollListener(new ...

    自定义的LISTVIEW控件

    本教程将深入探讨如何使用WIN32 API来编写一个自定义的ListView控件,以满足特定的需求。 首先,理解ListView的基本结构至关重要。ListView控件由多个部分组成,包括头部(Header)、项(Items)和子项(Subitems)...

    listView之自定义适配器Demo

    在这个"ListView之自定义适配器Demo"中,我们将探讨如何使用自定义适配器来实现特定的UI布局和交互功能,包括点击事件处理以及内容展示。 首先,我们要了解ListView的工作原理。ListView通过Adapter来与数据源进行...

    Android使用自定义ListView+ScrollView实现股票界面上下左右滑动

    这个项目的核心在于如何使用自定义的ListView和ScrollView来实现这样的效果,同时保证用户体验流畅,类似防同花顺App的股票界面。 首先,我们需要了解ListView和ScrollView的区别。ListView是一个高度优化的视图...

    自定义ListView实现下拉刷新+加载更多功能Demo

    4. **数据刷新逻辑**:在监听器的onRefresh()方法中,执行数据刷新操作,如向服务器发送请求,获取新数据,然后更新ListView。 接着,加载更多功能(Load More)允许用户在滚动到底部时加载更多数据,以实现无限...

    android listview自定义控件例子

    在Android开发中,ListView是一个非常重要的视图组件,它允许我们显示大量的数据并...记住,优化ListView的性能也非常重要,尤其是在处理大量数据时,比如使用ViewHolder模式和避免在`getView()`方法中执行耗时操作。

    android自定义dialog+listview自适应屏幕显示.zip

    在Android开发中,自定义Dialog和ListView的适配是常见的需求,特别是在创建具有独特用户体验的应用时。本项目“android自定义dialog+listview自适应屏幕显示”主要关注这两个方面的实现,确保界面在不同屏幕尺寸和...

    Android ListView 自定义adapter好友列表

    本文将深入探讨如何使用自定义Adapter来创建一个功能丰富的Android ListView好友列表。 首先,我们需要理解ListView的工作原理。ListView依赖于Adapter来提供数据和视图之间的桥梁。Adapter是连接数据源(如...

    Android自定义adapter的listview

    为了实现更加灵活和丰富的界面展示,我们通常需要对ListView进行自定义,这涉及到自定义Adapter的使用。自定义Adapter允许我们根据需求定制ListView的每一项视图,以适应不同的数据结构和界面设计。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics