Android中ListView适配器中的view重用和接口回调
来源:互联网 发布:smali语法编程 编辑:程序博客网 时间:2024/05/17 11:59
效果图:
项目结构:
MainActivity中:
说明的地方在代码中的注释里
package com.example.zhh.myapplicationinterface;import android.app.Activity;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity { private ListView lvText; private TextView tvMyyyy; Myadapter myadapter=null; ArrayList<String>listAll=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvText = (ListView)findViewById(R.id.lvText); tvMyyyy = (TextView)findViewById(R.id.tvMyyyy); tvMyyyy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "按钮点击了。。。", Toast.LENGTH_SHORT).show(); myTest(); } }); } private void myTest(){ if(myadapter==null) { listAll.addAll(getData()); myadapter=new Myadapter(listAll,MainActivity.this); lvText.setAdapter(myadapter);// 回调相当于把对象new Myadapter.MyBtnClickInterFace()对象传给Myadapter中myBtnClickInterFace对象// myBtnClickInterFace.setClick(position);调的就是myBtnClickInterFace对象调用重写后的方法 myadapter.setMyOnclick(new Myadapter.MyBtnClickInterFace() { @Override public void setClick(int position) { Toast.makeText(MainActivity.this, "position>>>"+position, Toast.LENGTH_SHORT).show(); } }); }else{ listAll.add("zhh1"); listAll.add("zhh2"); listAll.add("zhh3"); myadapter.notifyDataSetChanged();// 如果下面不回调,一样可以出发回调的点击事件,因为上面已经给Myadapter中myBtnClickInterFace对象// 已经赋值过,并且myBtnClickInterFace.setClick(position);就是myBtnClickInterFace对象调用重写后// 的方法// 重新实例化对象(就是重新调下面的点击事件)new Myadapter.MyBtnClickInterFace()对象传给Myadapter// 中myBtnClickInterFace对象// myBtnClickInterFace.setClick(position);调的就是myBtnClickInterFace对象调用重写后的方法// 在Myadapter中打印myBtnClickInterFace对象,发现和上面的对象不一样// myadapter.setMyOnclick(new Myadapter.MyBtnClickInterFace() {// @Override// public void setClick(int position) {// Toast.makeText(MainActivity.this, "position>>>" + position, Toast.LENGTH_SHORT).show();// }// }); } } private ArrayList<String> getData(){ ArrayList<String>list = new ArrayList<>(); for(int i = 0; i <50 ; i++) { list.add("zhh点击>>>"+i); } return list; }}Myadapter中
package com.example.zhh.myapplicationinterface;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.ArrayList;import java.util.logging.Logger;/** * Created by 16838 on 2017/4/18. */public class Myadapter extends BaseAdapter{ ArrayList<String>list; Context context; MyBtnClickInterFace myBtnClickInterFace;// 构造方法 public Myadapter(ArrayList<String>list,Context context){ this.list=list; this.context=context; }// 回调方法 public void setMyOnclick(MyBtnClickInterFace myBtnClickInterFace){ this.myBtnClickInterFace=myBtnClickInterFace; }// 回调接口 interface MyBtnClickInterFace{ public void setClick(int position); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View view, ViewGroup viewGroup) { ViewHoder viewHoder =null;// 注意这里使用的是getView方法中的参数view,否则不可被重用 if(view==null) { viewHoder=new ViewHoder(); view = LayoutInflater.from(context).inflate(R.layout.item_layout,null); viewHoder.tvTest= (TextView) view.findViewById(R.id.tvTest); view.setTag(viewHoder); }else{ viewHoder= (ViewHoder) view.getTag(); } viewHoder.tvTest.setText(list.get(position));// 在按钮点击事件中回调 viewHoder.tvTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("111","myBtnClickInterFace>>>"+myBtnClickInterFace); if(myBtnClickInterFace!=null) {// 执行回调方法 myBtnClickInterFace.setClick(position); } } }); return view; } class ViewHoder{ TextView tvTest; }}activity_main.xml中<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" tools:context=".MainActivity" android:orientation="vertical" > <TextView android:id="@+id/tvMyyyy" android:layout_width="match_parent" android:layout_height="50dp" android:text="按钮点击" android:gravity="center" android:background="#CC99FF" /> <ListView android:id="@+id/lvText" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView></LinearLayout>item_layout.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tvTest" android:layout_width="match_parent" android:layout_height="30dp" /></LinearLayout>
源码下载:http://download.csdn.net/detail/zhaihaohao1/9818520
0 0
- Android中ListView适配器中的view重用和接口回调
- android listview的item view重用
- 适配器中的 -- 接口回调
- android 中listview控件重用问题
- [Android]ListView中item的重用
- listview 中view的回收以及重用机制
- android listview中自定义适配器和复选框
- 代码重用和接口重用
- ListView适配器以及ListItem回收重用机制
- Android ListView适配器中的getView()被复用详解
- Android中的listview的adapter自定义适配器
- ListView乱谈之ListView中View重用的简单解析
- 在适配器中点击监听给activity中的控件赋值,采用接口回调的方式
- Android中Listview适配器的优化写法
- android listview和适配器adapter的使用
- 【Android基础知识】ListView和适配器的使用
- Android打造ListView和GridView万能适配器
- ListView中CheckBox和EditText重用问题解决方法
- Problem A: 还会用继承吗?
- 针对机器学习初学者的MNIST实验——回归的实现、训练和模型评估
- Android 7.0拍照出现android.os.FileUriExposedException异常
- (字典树Trie Tree)HDU 1251 统计难题
- Problem B: 一切皆对象
- Android中ListView适配器中的view重用和接口回调
- 数据库
- 区间覆盖问题
- HTML5 canvas 中的 fillstyle fillrect strokeStyle strokeRect fill stroke rect 的简单理解
- chapter6指针——输入三个整数,按从小到大顺序输出
- Problem C: 给我一台计算机吧!
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
- Android安卓---Hellword 简单提示框
- Problem D: 模板是个好东西