zoukankan      html  css  js  c++  java
  • [原]Android之自定义Adapter

      在ListView中经常用到适配器Adapter,android提供的三种Adapter主要有ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,ArraAdapter是简单的字符串适配器,在实际项目中很少会用到(功能太有限),SimpleAdapter可以自定义ListView的每个Item的布局,一般在简单的布局中会考虑使用,而SimpleCursorAdapter主要用于数据库,前两个的数据来源一般都是String[]或者List,后一个的数据来源一般是数据库查询得到的Cursor。

      在实际的项目中,尤其listView的每个Item的布局比较复杂的时候,我们一般都要自定义自己的Adapter,要实现自己的Adapter,我们需要继承BaseAdapter类,同时要覆写其中的四个方法:

    public int getCount() :该方法返回ListView中要显示的子View的数量;

    public Object getItem(int position):该方法返回一个子View,即listView中的一个子条目,也可以返回自己想要的信息。

    public long getItemId(int position):该方法根据Item在listview中的位置,返回其id;

    public View getView(int position, View convertView, ViewGroup parent) :该方法是最重要的,也是最难理解的了,它返回的是id为position的Item布局文件对应的View,该View中的各组件可以在getView方法中配置其显示。


      这里还有一个点需要说明,就是LayoutInflater类,它的inflate()方法可以根据布局文件获得其View返回值,接下来我们就可以取得该View中的各个组件,便可以为其设置资源,从而配置其显示。

      一个简单的自定义实现Adapter的代码类如下:

    package com.example.activity;   import com.example.activity.R;  import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView;  public class MenuActivity extends Activity {       private ListView list = null;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_menu);   list = (ListView)findViewById(R.id.list);      MyAdapter mAdapter = new MyAdapter();   list.setAdapter(mAdapter);  }    //自定义Adapter  class MyAdapter extends BaseAdapter{      int[] images = new int[]{     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher   };   String[] names = new String[]{     "干锅兔肉","水煮牛肉","剁椒鱼头","腊牛肉","藏香鸡",     "蒜茸蒸茄子","小炒肚丝","鳝鱼煨黄瓜","养生健康汤","鲜鱼汤"   };   String[] prices = new String[]{     "28","32","28","32","32",     "28","28","26","20","30"       };    @Override   public int getCount() {    // TODO Auto-generated method stub    return names.length;   }    @Override   public Object getItem(int position) {    // TODO Auto-generated method stub    return null;   }    @Override   public long getItemId(int position) {    // TODO Auto-generated method stub    return position;   }    //该方法返回整个Item的布局View   @Override   public View getView(int position, View convertView, ViewGroup parent) {    // TODO Auto-generated method stub    if(convertView == null){     //根据布局文件获取其view返回值     convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_adapter, null);    }    //获取listview中每个Item布局文件中的的子组件的ID    ImageView image = (ImageView)convertView.findViewById(R.id.image);    TextView name = (TextView)convertView.findViewById(R.id.name_course);    TextView price_number = (TextView)convertView.findViewById(R.id.price_number);          //为对应的Item中的各个组件设置资源,从而配置其显示    image.setImageResource(images[position]);    name.setText(names[position]);    price_number.setText(prices[position]);        return convertView;   }     }   } 

      每个Item的布局文件如下:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical" >           <ImageView          android:id="@+id/image"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_marginLeft="5dip"          android:src="@drawable/ic_launcher"          android:layout_marginTop="3dip" />   <TextView         android:id="@+id/name_course"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="8dip"         android:layout_marginTop="5dip"         android:text="水煮活鱼"         android:layout_below="@id/image"         android:textSize="16sp"/>         <TextView            android:id="@+id/price"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignBottom="@+id/image"            android:layout_marginLeft="15dp"            android:layout_toRightOf="@+id/name_course"            android:text="价格:"            android:textSize="22sp" />          <TextView             android:id="@+id/price_number"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_above="@+id/name_course"             android:layout_centerHorizontal="true"             android:text="48元"             android:textSize="22sp"/>   </RelativeLayout> 

       最终的运行效果如下:



  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/java20131201/p/3466789.html
Copyright © 2011-2022 走看看