android自定义接口,然后在activity中实现点击监听,调用getView解决滑动错位的问题

20 篇文章 0 订阅
1 篇文章 0 订阅



ListViewActivity.java


import java.util.ArrayList;

import java.util.List;


import com.example.entity.Bean;


import android.app.ListActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ListView;

import android.widget.Toast;


public class ListViewActivityextends ListActivity/* implements onViewClick */ {

private MyAdapteradapter;

private List<Bean>list;


@Override

protectedvoid onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view);


list = new ArrayList<Bean>();

for (inti = 0;i < 100;i++) {

Bean bean =new Bean();

bean.id =i;

bean.name ="张三";

bean.age = 10 +"" +i;

list.add(bean);

}


// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,

// android.R.layout.simple_list_item_1, list);


adapter =new MyAdapter(this,list);

setListAdapter(adapter);

/**

* 通过实现自定义监听器实现点击

*/

// adapter.setOnViewClick(new onViewClick() {

// @Override

// public voidonclick(View convertView,int index) {

// list.set(index, "jjkfsjks");

// // list.add(index, "jjkfsjks");

// adapter.notifyDataSetChanged();

// }

// });

}


/**

* 通过实现自定义监听器实现点击

*/

@Override

protectedvoid onListItemClick(ListViewl, Viewv, int position, long id) {

super.onListItemClick(l,v,position,id);


adapter.put(position, !adapter.get(position));//调用put设置状态

adapter.update(getListView(),position);//调用update更新


Toast.makeText(this,position +"", Toast.LENGTH_LONG).show();

}


// @Override

// public voidonclick(View convertView,int index) {

//

// }

}






MyAdapter.java 自定义接口调用


package com.example.aaaa;


import java.util.List;


import com.example.entity.Bean;


import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Color;

import android.util.ArrayMap;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;


public class MyAdapterextends BaseAdapter {


private Contextcontext;

private List<Bean>list;

private LayoutInflaterinflater;

public ArrayMap<Integer, Boolean>isChecked;//纪录点击状态,解决错位的问题


public MyAdapter(Contextcontext, List<Bean>list) {

this.list =list;

this.context =context;

inflater = LayoutInflater.from(context);

init();

}


@SuppressLint("NewApi")

private void init() {//初始化item状态

isChecked =new ArrayMap<Integer, Boolean>();

for (inti = 0;i <list.size();i++) {

isChecked.put(i,false);

}

}


@SuppressLint("NewApi")

public void put(Integer key, Boolean value) {//设置item状态

isChecked.put(key,value);

}


@SuppressLint("NewApi")

public boolean get(Integer key) {//获取itme状态

return isChecked.get(key);

}


@Override

public int getCount() {

return (list ==null ||list.isEmpty()) ? 0 :list.size();

}


@Override

public Bean getItem(intposition) {

return list.get(position);

}


@Override

public long getItemId(int position) {

returnposition;

}


@Override

public View getView(finalintposition, ViewconvertView, ViewGroupparent) {

final ViewHolderholder;

if (convertView ==null) {

// convertView=inflater.inflate(R.layout.test, parent,false);

convertView =new TextView(context);

holder = new ViewHolder();

holder.tv = (TextView)convertView;

convertView.setTag(holder);

} else {

holder = (ViewHolder)convertView.getTag();

}


/**

* 自定义监听在activity中实现刷新

*/

// holder.tv.setOnClickListener(new OnClickListener() {

// @Override

// public void onClick(View v) {

// if (click != null) {

// click.onclick(holder.tv, position);

// }

// }

// });

Bean item = getItem(position);

if (get(position)) {//根据状态设置view数据

holder.tv.setText(item.name +"刷新" + position);

holder.tv.setBackgroundColor(Color.WHITE);

} else {

holder.tv.setText(item.name);

holder.tv.setBackgroundColor(Color.GRAY);

}

returnconvertView;

}


/**

* 调用adapter的getView

* @param listView

* @param position

*/

public void update(ListView listView, int position) {

if (listView !=null) {

int start = listView.getFirstVisiblePosition();//获取第一个显示的索引First Visible Position

int last = listView.getLastVisiblePosition();//获取最后一个显示的索引Last Visible Position


for (inti =start;i <=last; i++)

if (/* position==i *//* or */getItem(position) ==listView.getItemAtPosition(i)) {//可以通过索引和对象比较

View view =listView.getChildAt(i -start);

getView(i,view,listView);

break;

}

}

}


privatestaticclass ViewHolder {

TextView tv;

}


public onViewClickclick;


public void setOnViewClick(onViewClick click) {

this.click =click;

}


public interface onViewClick {

void onclick(ViewconvertView,intindex);

}

}


源码地址http://download.csdn.net/detail/u010945409/9524479

github地址:https://github.com/xieyuhai/ListView-Refresh-Two


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值