热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓BaseAdapterListView和Button

点击ListView上的按钮,按钮背景变化,同时按钮上的字也发生变化。贴上源码:这个是Activity的源码:***@authorSeawin龙*packagecom

点击ListView上的按钮,按钮背景变化,同时按钮上的字也发生变化。

贴上源码:这个是Activity的源码:

/**
 * @author Seawin龙
 */
package com.cn.gordon.exhibition.walk.activity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.http.gordon.oa.command.NetCallBack;
import org.http.gordon.oa.command.NetUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cn.gordon.exhibition.walk.adapter.RankingAdapter;
import com.cn.gordon.exhibition.walk.application.GlobalVaries;
import com.cn.gordon.exhibition.walk.db.server.ExhibitorsService;
import com.cn.gordon.exhibition.walk.entity.ExhibitorsBean;
import com.cn.gordon.exhibition.walk.utils.Utils;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

/**
 * @author Seawin龙
 * 
 */
public class RankingActivity extends Activity {
    private ListView listView;
    private Button btnBack,btnQuery;
    private ProgressDialog pd;
    
    private RankingAdapter rAdapter;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rankinglisttopten);
        init();
        setAction();
    }

    /**
     * @author Seawin龙
     */
    public void init() {
        btnBack = (Button) findViewById(R.id.btn_back);
        btnQuery = (Button) findViewById(R.id.btn_query);
        
        listView = (ListView)findViewById(R.id.myrankinglistView);
        getRankingListTopTen();
    }
    
    private void displayListView(List mydbrankinglist){
        ArrayList> list;
        list = this.getItem(mydbrankinglist);

        rAdapter = new RankingAdapter(list, getApplicationContext());
        listView.setAdapter(rAdapter);
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView arg0, View arg1, int arg2,
                    long arg3) {
                Log.i("displayListView", "listView "+arg2+"\tclicked");
            }
        });
    }
    
    private void getRankingListTopTen() {
        GlobalVaries global = (GlobalVaries) getApplication();
        //弹出等待对话框
                pd = ProgressDialog.show(this, null, "加载中,请稍后...", false, false);
                //设置参数
                Map postvalues = new HashMap();
                postvalues.put("rankingListType", "104");
                postvalues.put("exhibitionHashCode", global.getExhibitionHashCode());
                new NetUtils(new NetCallBack(){

                    @Override
                    public void getNet(NetCallBack_State arg0, String arg1) {
                        System.out.println(arg1);
                        if(pd != null && pd.isShowing()){
                            pd.dismiss();
                            pd.cancel();
                        }
                        switch (arg0) {
                        case error:
                            Toast.makeText(RankingActivity.this, "网络资源错误:"+arg1, Toast.LENGTH_SHORT).show();
                            break;
                        case noNet:
                            Toast.makeText(RankingActivity.this, "网络未开启", Toast.LENGTH_SHORT).show();
                            break;
                        case wrong:
                            Toast.makeText(RankingActivity.this, "网络数据错误"+arg1, Toast.LENGTH_SHORT).show();
                            break;
                        case ok:
                            List mytemprankinglist = getRankingList(arg1);
                            System.out.println(">>>>>>>>>>>>>>>arg1:"+arg1);
                            List mydbrankinglist = getBeanFromDB(mytemprankinglist);
                            displayListView(mydbrankinglist);
                            break;
                        default:
                            break;
                        }
                    }
                }).read(this, false, Utils.RANKINGTOPTEN_URL, null, null, false, postvalues, "GBK", true, true);
        
    }

    protected List getBeanFromDB(List mytemprankinglist) {
        List returnList = null;
        if (mytemprankinglist!=null) {
            Collections.sort(mytemprankinglist,new  ComparatorExhibitors());
            System.out.println(">>>>>>>>>>>>>>>mytemprankinglist.size():"+mytemprankinglist.size());
            returnList = new ArrayList();
                ExhibitorsService eService = new ExhibitorsService(getApplicationContext());
                ExhibitorsBean eBean;
                for (int i = 0; i ) {
                    eBean = new ExhibitorsBean();
                    eBean = eService.queryExhibitorByExhibitorHashCode(mytemprankinglist.get(i).getHashCode());
                    System.out.println(">>>>>>>>>>>>>>>HashCode:"+mytemprankinglist.get(i).getHashCode());
                    returnList.add(eBean);
                }
        }
        return returnList;
    }

    protected List getRankingList(String arg1) {
        List list = new ArrayList();
        ExhibitorsBean bean = null;
        try {
            
            JSONArray ja = new JSONArray(arg1);
            JSONObject jo = null;
            for (int i = 0; i ) {
                jo = ja.getJSONObject(i);
                bean = new ExhibitorsBean();
                bean.setHashCode(jo.optString("key"));
                bean.setNativeId(jo.optInt("value"));
                list.add(bean);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    public ArrayList> getItem(List mydbrankinglist){
         ArrayList> item = new ArrayList>();
         if (mydbrankinglist!=null) {
             System.out.println(">>>>getItem内部:mynetrankinglist not null");
             for (int i = 0; i ) {
                 HashMap map = new HashMap();
                 ExhibitorsBean eBean = new ExhibitorsBean();
                 eBean = mydbrankinglist.get(i);
                 if (eBean!=null) {
                     map.put("item", (i+1)+" 、"+eBean.getNativeName());
                     if (eBean.getChangeCardFlag()==0) {
                         map.put("buttontext","换名片");
                    }else if (eBean.getChangeCardFlag()==1) {
                        map.put("buttontext","已换名片");
                    }
                     System.out.println(">>>>>eBean.getNativeName():"+eBean.getNativeName());
                     item.add(map);
                }else{
                    System.out.println("eBean is null");
                }
                 
            }
        }
         
         return item;
    }
    

    private void setAction() {
        
        btnBack.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
            }
        });
        btnQuery.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent in = new Intent(RankingActivity.this,CheckoutResultActivity.class);
                startActivity(in);

            }
        });
    }
    
    public class ComparatorExhibitors implements Comparator{
        @Override
         public int compare(ExhibitorsBean arg0, ExhibitorsBean arg1) {
             return arg1.getNativeId() - arg0.getNativeId();
         }
    }
    
}

然后是Adapter的源码:

  1 package com.cn.gordon.exhibition.walk.adapter;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.ArrayList;
  5 import java.util.Date;
  6 import java.util.HashMap;
  7 import java.util.Map;
  8 
  9 import org.http.gordon.oa.command.NetCallBack;
 10 import org.http.gordon.oa.command.NetUtils;
 11 
 12 import com.cn.gordon.exhibition.walk.activity.R;
 13 import com.cn.gordon.exhibition.walk.application.GlobalVaries;
 14 import com.cn.gordon.exhibition.walk.db.server.BusiCardHolderService;
 15 import com.cn.gordon.exhibition.walk.db.server.ExhibitorsService;
 16 import com.cn.gordon.exhibition.walk.entity.ExhibitorsBean;
 17 import com.cn.gordon.exhibition.walk.entity.MyBusiCardHolderBean;
 18 import com.cn.gordon.exhibition.walk.utils.Utils;
 19 
 20 import android.annotation.SuppressLint;
 21 import android.app.Activity;
 22 import android.app.ProgressDialog;
 23 import android.content.Context;
 24 import android.util.Log;
 25 import android.view.LayoutInflater;
 26 import android.view.View;
 27 import android.view.View.OnClickListener;
 28 import android.view.ViewGroup;
 29 import android.widget.BaseAdapter;
 30 import android.widget.Button;
 31 import android.widget.TextView;
 32 import android.widget.Toast;
 33 
 34 public class RankingAdapter extends BaseAdapter {
 35 
 36     private ArrayList> list;
 37     private Activity context;
 38     ViewHolder holder = null;
 39     private LayoutInflater listContainer;
 40     private ProgressDialog pd;
 41     private GlobalVaries global;
 42     private boolean successFlag = false;
 43     
 44     public RankingAdapter(ArrayList> list,Activity context){
 45         this.list = list;
 46         this.cOntext= context;
 47         listCOntainer= LayoutInflater.from(context);
 48     }
 49     
 50     @Override
 51     public int getCount() {
 52         return list.size();
 53     }
 54 
 55     @Override
 56     public Object getItem(int position) {
 57         return list.get(position);
 58     }
 59 
 60     @Override
 61     public long getItemId(int position) {
 62         return position;
 63     }
 64 
 65     @SuppressWarnings("deprecation")
 66     @Override
 67     public View getView(final int position, View convertView, ViewGroup parent) {
 68 
 69         if (cOnvertView==null) {
 70             holder = new ViewHolder();
 71             cOnvertView= listContainer.inflate(R.layout.rankinglistviewitem, null);
 72              holder.btnChangeCard = (Button) convertView.findViewById(R.id.rankingchangecardid);
 73              holder.txtCompanyName = (TextView) convertView.findViewById(R.id.rankinglistitemid);
 74              ExhibitorsBean eBean = new ExhibitorsBean();
 75              eBean = (ExhibitorsBean) list.get(position).get("eBean");
 76              if (eBean!=null) {
 77                  holder.txtCompanyName.setText((position+1)+"、"+eBean.getNativeName());
 78                  if (eBean.getChangeCardFlag()==0) {
 79                      holder.btnChangeCard.setText("换名片");
 80 //                     holder.btnChangeCard.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.changecardbtn_pressed_bg));
 81                      
 82                  }else if (eBean.getChangeCardFlag()==1) {
 83                      holder.btnChangeCard.setText("已换名片");
 84 //                     holder.btnChangeCard.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.btn_changecard_changed));
 85                  }
 86                  convertView.setTag(holder);//绑定ViewHolder对象
 87                 
 88              }
 89         }else{
 90             holder = (ViewHolder)convertView.getTag();//取出ViewHolder对象
 91         }
 92         holder.btnChangeCard.setOnClickListener(new BtnClickListener(position, context));
 93 //         holder.btnChangeCard.setOnClickListener(new OnClickListener() {
 94 //                @Override
 95 //                public void onClick(View v) {
 96 ////                    ExhibitorsBean eBean = (ExhibitorsBean) list.get(position).get("eBean");
 97 ////                    if (eBean!=null&&eBean.getChangeCardFlag()==0) {
 98 ////                        Toast.makeText(context, eBean.getNativeName()+ "Btn Clicked", Toast.LENGTH_SHORT).show();
 99 ////                        boolean flag = sendChangeBusiCardResulttoServer(eBean);
100 ////                        if (flag) {
101 ////                            holder.btnChangeCard.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.btn_changecard_changed));
102 ////                            Toast.makeText(context, "名片交换成功", Toast.LENGTH_SHORT).show();
103 ////                        }
104 ////                    }
105 //                    if (v.getId()==holder.btnChangeCard.getId()) {
106 //                        
107 //                        holder.btnChangeCard.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.btn_changecard_changed));
108 //                    }
109 //                }
110 //            });
111         return convertView;
112     }
113 
114     @SuppressLint("SimpleDateFormat")
115     protected boolean sendChangeBusiCardResulttoServer(final ExhibitorsBean eBean) {
116         // TODO Auto-generated method stub
117         global = (GlobalVaries)  context.getApplication();
118         successFlag = false;
119         //弹出等待对话框
120                 pd = ProgressDialog.show(context, null, "加载中,请稍后...", false, false);
121                 //设置参数
122                 Map postvalues = new HashMap();
123                 postvalues.put("aMoiHashCode", global.getUserHashCode());
124                 postvalues.put("zMoiHashCode", eBean.getHashCode());
125                 new NetUtils(new NetCallBack(){
126 
127                     @Override
128                     public void getNet(NetCallBack_State arg0, String arg1) {
129                         System.out.println(arg1);
130                         if(pd != null && pd.isShowing()){
131                             pd.dismiss();
132                             pd.cancel();
133                         }
134                         switch (arg0) {
135                         case error:
136                             Toast.makeText(context, "网络资源错误:"+arg1, Toast.LENGTH_SHORT).show();
137                             break;
138                         case noNet:
139                             Toast.makeText(context, "网络未开启", Toast.LENGTH_SHORT).show();
140                             break;
141                         case wrong:
142                             Toast.makeText(context, "网络数据错误"+arg1, Toast.LENGTH_SHORT).show();
143                             break;
144                         case ok:
145                             //将数据库中的展商交换过名片设置为已交换
146                             ExhibitorsService eService = new ExhibitorsService(context);
147                             eService.setExhibtorChangeCard(eBean.getHashCode());
148                             //向名片夹数据库中存储一条名片记录
149                             BusiCardHolderService cardHolderService = new BusiCardHolderService(context);
150                             MyBusiCardHolderBean cardBean = new MyBusiCardHolderBean();
151                             cardBean.setAddress(eBean.getAddress());
152                             cardBean.setCompanyLogoUrl(eBean.getImgUrl());
153                             cardBean.setCompanyName(eBean.getNativeName());
154                             cardBean.setCompanyPhonenum(eBean.getPhoneNumber());
155                             cardBean.setDelFlag(0);
156                             cardBean.setExhibitionName(global.getExhibitionName());
157                             cardBean.setExhibitorHashCode(eBean.getHashCode());
158                             cardBean.setFax(eBean.getFaxNumber());
159                             SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
160                             cardBean.setGetcardTime(sdf.format(new Date()));
161                             cardBean.setTempEmail(eBean.getTempEmail());
162                             cardHolderService.addABusiCard(cardBean);
163                             //改变当前页当前按钮的背景颜色
164                             successFlag = true;
165                             System.out.println("名片交换成功");
166                             break;
167                         default:
168                             break;
169                         }
170                     }
171                 }).read(context, false, Utils.CHANGEBUSINESSCARD_URL, null, null, false, postvalues, "GBK", true, true);
172         return successFlag;
173     }
174 
175     @Override
176     public void notifyDataSetChanged() {
177         // TODO Auto-generated method stub
178         super.notifyDataSetChanged();
179     }
180 
181     
182 }
183 class BtnClickListener implements OnClickListener{
184     private int pos;
185     private Activity context;
186     public BtnClickListener(int pos,Activity context) { 
187         this.pos = pos; 
188         this.cOntext= context;
189         } 
190     @SuppressWarnings("deprecation")
191     @Override
192     public void onClick(View v) {
193         v.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.btn_changecard_changed));
194     }
195     
196 }
197 class ViewHolder{
198     public TextView txtCompanyName;
199     public Button btnChangeCard;
200 }

 

然后是listviewitem的布局文件:

 1 xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal"
 6     android:descendantFocusability= "blocksDescendants"
 7     android:background="@drawable/listview_pressed_bg"
 8      >
 9 
10         <TextView
11             android:layout_width="wrap_content"
12             android:layout_height="wrap_content"
13             android:layout_centerVertical="true"
14             android:id="@+id/rankinglistitemid"
15             android:textColor="@color/black"
16             android:textSize="18sp" 
17             android:layout_marginLeft="15dip"
18             android:layout_marginTop="10dip"
19             android:layout_marginBottom="10dip"
20             />
21         <Button
22             android:layout_width="60dip"
23             android:layout_height="30dip"
24             android:gravity="center"
25             android:layout_gravity="center"
26             android:layout_centerVertical="true"
27             android:id="@+id/rankingchangecardid"
28             android:text="@string/exchangecard"
29             android:textColor="@color/white"
30             android:textSize="14sp"
31             android:background="@drawable/changecardbtn_pressed_bg"
32             android:focusable = "false"
33             android:layout_alignParentRight="true"
34             android:layout_marginRight="15dip"
35             android:layout_marginTop="10dip"
36             android:layout_marginBottom="10dip">
37             
38         Button>
39 RelativeLayout>

这个布局文件中,

下的
android:descendantFocusability= "blocksDescendants"
android:focusable = "false"可以分离listview和Button的点击事件。

推荐阅读
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文介绍如何使用R语言中的相关包来解析和转换搜狗细胞词库(.scel格式),并将其导出为CSV文件,以便于后续的数据分析和文本挖掘任务。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • Go语言实现文件读取与终端输出
    本文介绍如何使用Go语言编写程序,通过命令行参数指定文件路径,读取文件内容并将其输出到控制台。代码示例中包含了错误处理和资源管理的最佳实践。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
author-avatar
盎然茗嘉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有