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; } }
效果如图:
这是监听输出效果
这样就可以了,附带上传代码
相关推荐
chenjinlong 2020-02-19
83580494 2013-07-19
langjiao 2013-07-16
kiduo0 2013-07-10
gongzhiyao0 2010-11-15
bigdatazx 2010-11-05
Urchindong 2011-08-01
peixiaopao 2011-08-21
MeOrdinary 2014-05-13
magic00 2019-10-21
guizhongyun 2011-09-27
csuhanshuai 2015-03-30
Sunanang 2015-03-30
snailbing 2015-04-23
huohu00 2015-04-22
toperfect 2015-07-01
nickey 2012-01-29
Rgenxiao 2012-01-26
满城风絮 2011-12-03