ListView的注册点击事件2

使用接口回调和使用抽象类回调

接口回调

Adapter

public class ContentAdapter extends BaseAdapter implements OnClickListener {

private static final String TAG = "ContentAdapter";

private List<String> mContentList;

private LayoutInflater mInflater;

private Callback mCallback;

/**

* 自定义接口,用于回调按钮点击事件到Activity

* @author Ivan Xu

* 2014-11-26

*/

public interface Callback {

public void click(View v);

}

public ContentAdapter(Context context, List<String> contentList,

Callback callback) {

mContentList = contentList;

mInflater = LayoutInflater.from(context);

mCallback = callback;

}

@Override

public int getCount() {

Log.i(TAG, "getCount");

return mContentList.size();

}

@Override

public Object getItem(int position) {

Log.i(TAG, "getItem");

return mContentList.get(position);

}

@Override

public long getItemId(int position) {

Log.i(TAG, "getItemId");

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Log.i(TAG, "getView");

ViewHolder holder = null;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.list_item, null);

holder = new ViewHolder();

holder.textView = (TextView) convertView

.findViewById(R.id.textView1);

holder.button = (Button) convertView.findViewById(R.id.button1);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.textView.setText(mContentList.get(position));

holder.button.setOnClickListener(this);

holder.button.setTag(position);

return convertView;

}

public class ViewHolder {

public TextView textView;

public Button button;

}

//响应按钮点击事件,调用子定义接口,并传入View

@Override

public void onClick(View v) {

mCallback.click(v);

}

}

Activity类

public class MainActivity extends Activity implements OnItemClickListener,

Callback {

// 模拟listview中加载的数据

private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",

"南京", "武汉", "长沙", "杭州" };

private List<String> contentList;

private ListView mListView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

mListView = (ListView) findViewById(R.id.listview);

contentList = new ArrayList<String>();

for (int i = 0; i < CONTENTS.length; i++) {

contentList.add(CONTENTS[i]);

}

//

mListView.setAdapter(new ContentAdapter(this, contentList, this));

mListView.setOnItemClickListener(this);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

/**

* 响应ListView中item的点击事件

*/

@Override

public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position,

Toast.LENGTH_SHORT).show();

}

/**

* 接口方法,响应ListView按钮点击事件

*/

@Override

public void click(View v) {

Toast.makeText(

MainActivity.this,

"listview的内部的按钮被点击了!,位置是-->" + (Integer) v.getTag() + ",内容是-->"

+ contentList.get((Integer) v.getTag()),

Toast.LENGTH_SHORT).show();

}

}

抽象类回调

adapter

public class ContentAdapter extends BaseAdapter {

private static final String TAG = "ContentAdapter";

private List<String> mContentList;

private LayoutInflater mInflater;

private MyClickListener mListener;

public ContentAdapter(Context context, List<String> contentList,

MyClickListener listener) {

mContentList = contentList;

mInflater = LayoutInflater.from(context);

mListener = listener;

}

@Override

public int getCount() {

Log.i(TAG, "getCount");

return mContentList.size();

}

@Override

public Object getItem(int position) {

Log.i(TAG, "getItem");

return mContentList.get(position);

}

@Override

public long getItemId(int position) {

Log.i(TAG, "getItemId");

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Log.i(TAG, "getView");

ViewHolder holder = null;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.list_item, null);

holder = new ViewHolder();

holder.textView = (TextView) convertView

.findViewById(R.id.textView1);

holder.button = (Button) convertView.findViewById(R.id.button1);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.textView.setText(mContentList.get(position));

holder.button.setOnClickListener(mListener);

holder.button.setTag(position);

return convertView;

}

public class ViewHolder {

public TextView textView;

public Button button;

}

/**

* 用于回调的抽象类

* @author Ivan Xu

* 2014-11-26

*/

public static abstract class MyClickListener implements OnClickListener {

/**

* 基类的onClick方法

*/

@Override

public void onClick(View v) {

myOnClick((Integer) v.getTag(), v);

}

public abstract void myOnClick(int position, View v);

}

}

Activity

public class MainActivity extends Activity implements OnItemClickListener {

// 模拟listview中加载的数据

private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",

"南京", "武汉", "长沙", "杭州" };

private List<String> contentList;

private ListView mListView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

mListView = (ListView) findViewById(R.id.listview);

contentList = new ArrayList<String>();

for (int i = 0; i < CONTENTS.length; i++) {

contentList.add(CONTENTS[i]);

}

//实例化ContentAdapter类,并传入实现类

mListView.setAdapter(new ContentAdapter(this, contentList, mListener));

mListView.setOnItemClickListener(this);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

//响应item点击事件

@Override

public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position,

Toast.LENGTH_SHORT).show();

}

/**

* 实现类,响应按钮点击事件

*/

private MyClickListener mListener = new MyClickListener() {

@Override

public void myOnClick(int position, View v) {

Toast.makeText(

MainActivity.this,

"listview的内部的按钮被点击了!,位置是-->" + position + ",内容是-->"

+ contentList.get(position), Toast.LENGTH_SHORT)

.show();

}

};

}

本人只会这几种,其他的就不知道了,希望大家多多交流,可以帮助你......

时间: 2024-08-03 16:33:55

ListView的注册点击事件2的相关文章

ListView的注册点击事件1

ListView的注册点击事件1 //注册点击事件 personListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { /** * * @param parent 当前ListView * @param view 代表当前被点击的条目 * @param position 当前条目的位置 * @param id 当前被点击的条目的id */ @Override public void onItemClick(A

popupwindow放置listview,并且使listview可以响应点击事件

最近在模仿微信的选择头像的功能,就是一个Popwindow里面是一个ListView,ListView是所有相册,用户点击里面的相册,那么那个相片展示的页面就会显示你选择的相册的相片 .刚开始发现里面的ListView不能获取点击事件,插入如下代码解决 popWinPlaylist.setFocusable(true); popWinPlaylist.update(); 随后发现popwindown以外的地方不能响应点击事件,其实你可以通过pw(PopupWindow对象).getContext

Android学习之解决ListView中item点击事件和item中Button点击事件冲突问题

在ListView中添加Button后,如果只是单纯的加入而不加限制的话,ListView的onClick点击事件没有响应,因为Button获取了item的焦点,想要两者都可点击,需要加上如下限制: 在ListView的适配器中的布局文件中添加: (1)在布局文件的根元素上中添加属性android:descendantFocusability="blocksDescendants" (2)在Button中添加属性android:focusable="false"和a

从Listview与Button点击事件冲突看安卓点击事件分发机制

题目有点长.其实实现Listview的时候大家都可能会碰到这样的一个问题,那就是Listview的OnItemClickListener点击事件与Button(或者checkbox)的touch(或者click)事件冲突的问题. 声明一下,非常感谢郭大师的这篇blog: http://blog.csdn.net/guolin_blog/article/details/9097463 原理参考了这篇blog,事实上也是本人功力不够不能阅读源码的缺陷啊. 下面说下自己的解决步骤: 1)首先先set一

防止多次引入js文件导致的重复注册点击事件

前端代码中的js文件如果是动态引入的或者是某个事件操作进行注册的,那么重复的引入js文件或者多次触发注册事件会导致事件多次进行注册,造成不必要的麻烦,所以需要在每次注册之前将先前的事件进行取消,下面以按钮的注册点击事件为例进行说明: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>

listview 模仿用户点击事件。

正确的方法 gvFlow.performItemClick(gvFlow.getChildAt(0),0,gvFlow.getAdapter().getItemId(0)); gvFlow.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id)

Android实战简易教程-第十五枪(实现ListView中Button点击事件监听)

1.main.xml <RelativeLayout 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" androi

Android listview的item点击事件失效Bug的解决

原因:listview布局中出现了button  .imaageButton.checkBox等可以点击的控件 第一种解决方法:在布局中添加android:descendantFocusability="blocksDescendants" 第二种解决方法:使用其他控件代替,在activity中用setOnClickListener监听点击事件

ListView的Item点击事件(消息传递)

转载请保留原文出处“http://my.oschina.net/gluoyer/blog”,谢谢! 您可以到博客的“友情链接”中,“程序猿媛(最新下载)*.*”下载最新版本,持续更新!当前版本,也可直接点击“当前1.5版本”下载.     引子:自定义ListView的Adapter,给Item中的子控件(按钮.图标.文字等)添加点击事件,来进行点击后的不同处理,是经常要做的事情.但有些需要在处理事件中,对Activity中其他控件进行更新的话,通常把Adapter在Activity中实现,处理