`
anson_xu
  • 浏览: 514927 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

自定义BaseAdapter Android ListView GrideView spinner 等 每行包含图片,TextView,checkbox的显示

阅读更多

 /**
  * MyAdapter
  * TODO
  * @knownBugs
  */
 public class MyAdapter extends BaseAdapter {
     /** the context*/
  private Context mContext;
  /** the list of the ShopInfoSerialzable*/
  private List<ShopInfoSerialzable> mShopData;
  /** layoutInflater*/
  private LayoutInflater layoutInflater;
  
  /**
   * ViewHolder
   * TODO
   * @knownBugs
   */
  class ViewHolder {//这个类变量对应显示的一行的所有组件
      /** the picture of the goods*/
   ImageView shopIcon;
   /** the name of the goods*/
   TextView shopName;
   /** the checkBox*/
   CheckBox checkBox;
   
  }
  
  //构造函数
  public MyAdapter(Context aContext,
          List<ShopInfoSerialzable> aShopData) {
   this.mContext = aContext;
   this.mShopData = aShopData;
   layoutInflater =
       (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
  }

  @Override
  public int getCount() {
   return mShopData.size();
  }

  @Override
  public Object getItem(int aPosition) {
   return mShopData.get(aPosition);
  }

  @Override
  public long getItemId(int aPosition) {
   return aPosition;
  }
  
  //主要需要重写的方法,得到用来显示的每一行组件
  @Override
  public View getView(final int aPosition,
          View aConvertView, ViewGroup aParent) {
   ViewHolder holder = null;
   if (aConvertView == null) {
       aConvertView =
           layoutInflater.inflate(R.layout.shopping_list_row, null);
    holder = new ViewHolder();
    holder.shopIcon =
        (ImageView) aConvertView.findViewById(R.id.shoppingIcon);
    aConvertView.setTag(holder);//这里就设定了图片,可以从一个集合中动态取,可以接下来改变它们的值
    holder.shopName =
        (TextView) aConvertView.findViewById(R.id.shoppingName);
    holder.checkBox =
        (CheckBox) aConvertView.findViewById(R.id.checkBox);
   } else {
    holder = (ViewHolder) aConvertView.getTag();
   }
   
   ShopInfoSerialzable shopInfoSerialzable = mShopInfos.get(aPosition);
   if (shopInfoSerialzable != null) {
    holder.shopName.setText(shopInfoSerialzable.getmShopName()
            + "(" + shopInfoSerialzable.getmShopNumber() + ")");
    
    int finishId = shopInfoSerialzable.getmFinishId();
    String comleteStr = (finishId == 1)
        ? mContext.getResources().getString(R.string.complete)
     : mContext.getResources().getString(R.string.uncomplete);
    boolean checked = (finishId == 1) ? true : false;
    holder.complete.setText(comleteStr);
    holder.checkBox.setChecked(checked);
    
    if (checked) {
        aConvertView
            .setBackgroundColor(Color.parseColor("#99CC66"));
     holder.checkBox.setVisibility(CheckBox.INVISIBLE);
     
    } else {
        aConvertView.setBackgroundColor(Color.WHITE);
     holder.checkBox.setVisibility(CheckBox.VISIBLE);
     holder.complete.setTextColor(Color.parseColor("#cc0000"));
    }
   }
   holder.checkBox.setOnClickListener(new OnClickListener() {
    
    @Override
    public void onClick(View av) {
     ShopInfoSerialzable shopInfoSerialzable =
         mShopInfos.get(aPosition);
     int finishId = shopInfoSerialzable.getmFinishId();
     if (finishId == 0) { //unCheck to check
      String shopName = shopInfoSerialzable.getmShopName();
      mDb.updateDataStatus(DataModel.TABLE_SHOPPING,
              DataModel.FINISHID, 1,
              DataModel.SHOPNAME, shopName);
      reGroupStatus(1, shopName);
      MyAdapter.this.notifyDataSetChanged();
     } else if (finishId == 1) { //check to unCheck
      mShoppingName = shopInfoSerialzable.getmShopName();
      mDb.updateDataStatus(DataModel.TABLE_SHOPPING,
              DataModel.FINISHID, 0, DataModel.SHOPNAME,
              mShoppingName);
      reGroupStatus(0, mShoppingName);
      MyAdapter.this.notifyDataSetChanged();
     }
    }
   });
   
   
   return aConvertView;
  }

 

 

 

显示图片的方式也可以

  1. @Override  
  2.         public View getView(int position, View convertView, ViewGroup parent) {   
  3.             ImageView i;   
  4.             if(null==convertView){   
  5.                 i=new ImageView(PeopleScreen.this);   
  6.                 i.setScaleType(ScaleType.FIT_CENTER);   
  7.                 i.setLayoutParams(new GridView.LayoutParams(5050));   
  8.             }else{   
  9.                 i=(ImageView)convertView;   
  10.             }   
  11.             ResolveInfo info=mApps.get(position);   
  12.             i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));   
  13.             return i;   
  14.         }   


 }

分享到:
评论

相关推荐

    ListView的使用自定义BaseAdapter

    本篇主要讲解如何在Android Studio中使用ListView,并结合自定义的BaseAdapter来实现数据的绑定和显示。 首先,我们需要在布局文件中添加ListView组件。在res/layout目录下的xml布局文件中,可以这样定义一个...

    Android自定义adapter的listview

    - 数据绑定:使用findViewById()获取View,然后根据数据项设置View的内容,如TextView的文字、ImageView的图片等。 - 视图状态管理:对于有选择状态的ListView,需要维护选中状态,比如使用CheckBox,可以通过 ...

    BaseAdapter_listview

    `BaseAdapter`是Android SDK提供的一种适配器,它是所有自定义ListView适配器的基础类,用于将数据绑定到ListView上。本示例"BaseAdapter_listview"正是通过自定义BaseAdapter来实现ListView的展示。 首先,我们要...

    android BaseAdapter listView优化

    在ListView中,BaseAdapter是一个抽象类,你需要继承它并实现其中的方法,如`getView()`,来定制每个列表项的显示。`getView()`方法会在ListView滚动时被频繁调用,用于创建或复用ListView的子视图(ViewHolder)。 ...

    json从网上下载解析,用baseadapter,listview显示

    1. BaseAdapter是Android中的适配器基类,它实现了ListView、GridView等控件的数据源接口,负责将数据绑定到列表项上。 2. 自定义Adapter:通常需要继承BaseAdapter并重写其中的几个关键方法,如getCount()、getItem...

    自定义spinner适配器 用textview,listview 制作spinner

    综上所述,通过自定义适配器,我们可以灵活地使用TextView和ListView来创建具有各种样式的Spinner。这不仅提高了用户体验,也使我们的应用程序更加个性化和专业。记得在实际开发中根据具体需求进行调整,以达到最佳...

    ListView&Spinner;组合控件案例

    在Android开发中,ListView和Spinner是两种非常常用的UI组件,它们在构建用户界面时起着至关重要的作用。ListView主要用于展示大量的列表数据,而Spinner则提供了一个下拉选择菜单,用于在一组预定义的选项中进行...

    使用BaseAdapter完成listview中带图片item

    通过自定义BaseAdapter,我们可以控制ListView中的每一项如何显示,包括添加图片。 1. **创建布局文件**: 首先,我们需要为ListView的每个Item创建一个布局文件。这个布局通常会包含一个ImageView和一个TextView,...

    用BaseAdapter实现的ListView

    BaseAdapter是所有自定义适配器的基类,包括ArrayAdapter、SimpleAdapter等。它的主要职责是将数据模型转换为ListView可以显示的View。通过重写BaseAdapter中的几个关键方法,我们可以定制化数据的显示方式: 1. `...

    Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

    首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。对于复杂的数据结构,我们需要创建自定义适配器以满足需求。 **1. 自定义适配器** 自定义...

    android listview 里面使用checkbox

    当需要在ListView的每一项中加入复选框(Checkbox)时,这通常涉及到自定义Adapter和处理复选状态的逻辑。以下是对这个主题的详细阐述: 1. **自定义Adapter**: - Android的ListView默认不支持在每一项中直接添加...

    ListView中Spinner的使用

    然后,为ListView设置Adapter,这个Adapter需要继承自BaseAdapter,以便处理每个列表项中的Spinner。这里需要特别注意,因为每次点击ListView时,系统可能会重新创建视图,所以要确保Spinner的状态在滚动过程中得到...

    Android_BaseAdapter_ListView

    在提供的"ListViewTeacheing"文件中,可能包含了一个示例项目的源代码,包括一个自定义的BaseAdapter实现以及如何在Activity中使用这个Adapter与ListView进行交互。通过学习这个例子,你可以更好地理解上述步骤,并...

    android listview 高效显示网络图片,自定义listview布局

    然而,当ListView中的每一项都需要显示网络图片时,如果不进行优化,可能会导致性能问题,如界面卡顿、滚动不流畅等。这个问题的解决方法是高效地加载网络图片并自定义ListView的布局。 首先,我们需要了解异步加载...

    android listView 改变选中行的 字体颜色和 图片

    要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细介绍: 1. **ListView的基本使用**: - ListView是一个视图容器,它能加载...

    Android ListView CheckBox

    首先,我们需要创建一个自定义的ListView项布局,包含一个TextView用于显示数据,以及一个CheckBox用于选择。在布局文件中,CheckBox通常设置为默认不可见,只有在用户长按列表项时才会显示。以下是一个简单的布局...

    ListView和BaseAdapter搭配Button点击事件获取不同Item

    2. **自定义ListView Item布局**:在XML中设计一个ListView的Item布局,包含一个Button。例如,创建一个名为`list_item.xml`的布局文件: ```xml &lt;LinearLayout xmlns:android=...

    android ListView+CheckBox实现单选

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。当需要在列表项中添加选择功能时,我们通常会结合使用ListView与CheckBox。本篇将详细讲解如何利用这两种组件实现ListView中的单选功能。 ...

    Android 实例讲解 Spinner样式修改

    对于android项目开发来说,常常会用到Spinner实现下拉框的效果。而对于Spinner加载适配器的方法有多种: 1.直接加载android自带的ArrayAdapter,SimpleAdapter; 2.自定义继承BaseAdapter的适配器。 对于适配器加载...

Global site tag (gtag.js) - Google Analytics