ListView之在Activity里面重写item里面的事件

ListView是android里面用到很多的一个控件,这使用起来比较简单,又很实用。今天要讲的就是在Activity进而 重写Adapter的Button事件,废话不多说,就直接开始了
1、创建一个适配器FindAdapter.java
public class FindAdapter extends CursorAdapter implements OnClickListener{
    private Context context;//this context
    private OnItemFindClick onItemFindClick;

    public FindAdapter(Cursor cursor){
        super(
                IM.im,
                cursor,
                FLAG_REGISTER_CONTENT_OBSERVER
                );
    }

    public View getView(int pos, View convertView, ViewGroup parent) {
        return renderUser(pos,convertView,parent);
    }

    // 将分割线放在上面,利于判断
    public View renderUser(int pos,View view,ViewGroup parent){
        FindHolder findHolder = null;
        if(view == null){
            view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.tt_item_find, parent,false);
            findHolder = new FindHolder(view);
            findHolder.btnRefuse.setOnClickListener(this);
            findHolder.btnRefuse.setTag(pos);//这里很容易忘记
            findHolder.btnAccept.setOnClickListener(this);
            findHolder.btnAccept.setTag(pos);
            view.setTag(findHolder);
        }else{ //ant
            findHolder = (FindHolder)view.getTag();
        }

        Cursor cursor = (Cursor)getItem(pos);
        String accountStr = cursor.getString(cursor.getColumnIndex(ContactProvider.ContactColumns.ACCOUNT));
        String nameStr = cursor.getString(cursor.getColumnIndex(ContactProvider.ContactColumns.NAME));
        findHolder.tvAccount.setText(accountStr+"");
        findHolder.tvName.setText(nameStr);
        findHolder.ivcAvatar.setImageDrawable(IM.getAvatar(accountStr));
        return view;
    }

    public void setOnItemFindClick(OnItemFindClick onItemFindClick){
        this.onItemFindClick = onItemFindClick;
    }

    class FindHolder{
        TextView tvAccount;
        TextView tvName;
        ImageViewCircle ivcAvatar;
        Button btnRefuse;
        Button btnAccept;

        public FindHolder(View v){
            tvAccount = (TextView)v.findViewById(R.id.tt_item_find_account);
            tvName = (TextView)v.findViewById(R.id.tt_item_find_name);
            ivcAvatar = (ImageViewCircle)v.findViewById(R.id.tt_item_find_icon);
            btnRefuse = (Button)v.findViewById(R.id.tt_item_find_refuse);
            btnAccept = (Button)v.findViewById(R.id.tt_item_find_accept);
        }
    }

    public interface OnItemFindClick{
         public void onAcceptClick(View v);
         public void onRefuseClick(View v);
    }

    public void onClick(View v) {
        switch(v.getId()){
        case R.id.tt_item_find_accept://答应请求
            onItemFindClick.onAcceptClick(v);
            break;
        case R.id.tt_item_find_refuse://拒绝请求
            onItemFindClick.onRefuseClick(v);
            break;
        }
    }

    public void bindView(View arg0, Context arg1, Cursor arg2) {}

    public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
        return null;
    }
}

2.当然需要一个布局哦!这里是我的布局tt_item_find.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="wrap_content"
    android:gravity="center_vertical" >

    <com.chat.ui.widget.ImageViewCircle
        android:id="@+id/tt_item_find_icon"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_marginLeft="10dp"
        android:scaleType="centerCrop"
        android:src="@drawable/tt_login_logo" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginLeft="10dp" >

         <TextView
            android:id="@+id/tt_item_find_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/contact_realname_color"
            android:textSize="17sp" />

        <TextView
            android:id="@+id/tt_item_find_account"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/contact_name_color"
            android:textSize="12sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="right"
        android:orientation="horizontal"
        android:layout_marginRight="10dp">

        <Button
            android:id="@+id/tt_item_find_accept"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:background="@drawable/tt_show_head_toast_bg"
            android:text="@string/tt_item_find_accept"
            android:textColor="@color/contact_realname_color"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"/>

         <Button
            android:id="@+id/tt_item_find_refuse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/tt_show_head_toast_bg"
            android:text="@string/tt_item_find_refuse"
            android:textColor="@color/contact_realname_color"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"/>

    </LinearLayout>

</LinearLayout>

3.现在item开始了,就开始写Activity了
public class FindActivity  extends Activity implements OnItemFindClick{

    private ListView list;
    private FindAdapter findAdapter;
    private OnItemFindClick onItemFindClick;
    private Cursor cursor;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initPatent();
        init();
        initData();
    }
    //cursor的数据自己去加载吧
    private void initData(){}

    private void init(){
        context = this;
        list = (ListView)contentView.findViewById(R.id.tt_activity_find_list);
        onItemFindClick = this;
        findAdapter = new FindAdapter(cursor);
        findAdapter.setOnItemFindClick(onItemFindClick);
        list.setAdapter(findAdapter);
    }

    //接受好友请求
    public void onAcceptClick(View v) {
        Log.e("findActivity-->","accept");
        Log.e("find---》",""+ v.getTag());
        final Cursor cursor = (Cursor)findAdapter.getItem((Integer) v.getTag());
    }

    //拒绝好友请求
    public void onRefuseClick(View v) {
        Log.e("findActivity-->","refuse");
    }
}

4.activitty的布局自己去写吧!好了就完事了。
时间: 2024-10-08 10:13:59

ListView之在Activity里面重写item里面的事件的相关文章

Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画

前言: 之前,我已经写了两篇博文,给大家介绍了Android的基础动画是如何实现的,如果还不清楚的,可以点击查看:Android Animation动画详解(一): 补间动画 及 Android Animation动画详解(二): 组合动画特效 . 已经熟悉了基础动画的实现后,便可以试着去实现常见APP中出现过的那些精美的动画.今天我主要给大家引入一个APP的ListView的动画效果: 当展示ListView时,Listview的每一个列表项都按照规定的动画显示出来. 说起来比较抽象,先给大家

精通RecyclerView:打造ListView、GridView、瀑布流;学会添加分割线、 添加删除动画 、Item点击事件

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53126706 本文出自[DylanAndroid的博客] 精通RecyclerView:打造ListView.GridView.瀑布流:学会添加分割线. 添加删除动画 .Item点击事件 在上一篇Android用RecyclerView练手仿美团分类界面写了RecyclerView的基本用法, 今天想想,在这里重新学习一下RecyclerView的完整用法.包括如何打造一个普

RecyclerView的Item的单击事件

显示效果 RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: RecyclerView的使用方法请参考:RecyclerView的简单使用 第一步: 在RecyclerView的Adapyer中定义单击事件的回调接口: /** * 定义RecyclerView选项单击事件的回调接口 */ public interface OnItemClickLi

从源码角度入手实现RecyclerView的Item点击事件

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6758373.html RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是知道和会用又是两种情况,跟随我一起从源码角度分析,RecyclerView 点击事件. 首先看一下 Google 对 ListView 家族谱的介绍: 可以看出 ListView 归根

Activity是如何接收到touch事件的(窗口与用户输入系统)

在<浮窗开发之窗口层级>这片文章中,开篇提出了三个问题: * 窗口层级关系(浮窗是如何"浮"的)? * 浮窗有哪些限制,如何越过用户授权实现浮窗功能? * Activity是如何接收到touch事件的? 前两个问题在前两篇文章中已经分析,在这篇文章中我们以第三个问题为切入点,简单分析一下窗口与用户输入的关系. Touch事件是如何分发到Activity上来的? 正常的思路是直接去寻找Activity 的dispatchTouchEvent方法,我们看看Activity的di

从头开始学 RecyclerView(二) 添加item点击事件

不管了,先来张图 偶吐了个槽 item点击事件必须手动添加,默认并没有一个显式的API接口可供调用. 为了节约学习时间,网上找了篇很不错的文章.这里基本就复制了. 添加点击事件 RecyclerView#addOnItemTouchListener 分析 查看RecyclerView源码可以看到,RecyclerView预留了一个Item的触摸事件方法: public void addOnItemTouchListener(OnItemTouchListener listener) { mOnI

ListView的item监听事件,并且把值传递给另一个activity

思路: 先从服务器那里得到数据newsInfoList 在得到每一个位置的news集合 传递数据给另一个activity 关键代码: lvnews.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { News news=newsInfoList.get(posi

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

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

ListView getView中放置多个item和getItemViewType的用法

ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能! 实际上Android为你缓存了视图. Android中有个叫做Recycler的构件,下图是他的工作原理: 如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中. ListView先请求一个t