`
zhanhao
  • 浏览: 286758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ListView中Adapter的自定义

阅读更多

虽然android类库给我们提供了很多与ListView适配的Adapter并且使用起来非常方便,但是想要开发出美观的程序,自带的是不够的所以我们要重写Adapter。
1.继承BaseAdapter类
2.重写getView()--每一项显示成什么样有它决定
3.重写getCount()--一共有多少项由它决定
4.实现OnItemClickListener事件--为每一项添加事件实现onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3)事件。
下面是一个简单的例子:

package net.my.jokebook;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
public class Default extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.deaultxml);
  List<String>   list = new ArrayList<String>();  
  list.add("aa");
  list.add("bb");  
  //得到想要填充的ListView
  ListView lv =(ListView)findViewById(R.id.lvjokes);
  RatingAdapter adapter = new RatingAdapter(this,list);  
  //此处必须为通过上面这种方式new的RatingAdapter否则listInner会为空
  //为ListView添加事件
  lv.setOnItemClickListener(adapter);  
  lv.setAdapter(adapter);
}
//定义一个内部类继承BaseAdapter类并实现OnItemClickLister接口
class RatingAdapter extends BaseAdapter implements OnItemClickListener
{   
  LayoutInflater layoutInflater;
  String inflater = Context.LAYOUT_INFLATER_SERVICE;
  private List<String> listInner = null;
  public RatingAdapter(Context context)
  {}
  public RatingAdapter(Context context,List<String> list){
    layoutInflater = (LayoutInflater) context
   .getSystemService(inflater);   
   this.listInner = list;
  }
  public int getCount() {
   //通过此项决定ListView一共有多少Item
   return listInner.size();
  }
  public Object getItem(int arg0) {
   // TODO Auto-generated method stub
   return listInner.get(arg0);
  }
  public long getItemId(int arg0) {
   // TODO Auto-generated method stub
   return arg0;
  }
  //为每一项中的控件赋值,每一项显示的数据有它决定
  public View getView(int arg0, View arg1, ViewGroup arg2) {   
   //得到模板布局文件对象 ,并为其中的控件赋值
   LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(
     R.layout.defaultmodel, null);
   TextView tvTitle = (TextView)linearLayout.findViewById(R.id.tvTitle);
   //tvTitle.setText(list.get(arg0));
   tvTitle.setText(Html.fromHtml("<font color=\"#0000ff\">"+listInner.get(arg0)+"</font>"));
   TextView tvContent = (TextView)linearLayout.findViewById(R.id.tvContent);
//此处直接给内容了
   tvContent.setText("Content");
   RatingBar rbLeavel =(RatingBar)linearLayout.findViewById(R.id.rbLevel);   
   rbLeavel.setRating(Float.parseFloat("4.0"));
   return linearLayout;
  }
  //实现onItemClick()方法
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   //对单击每一项的处理
   new AlertDialog.Builder(Default.this).setTitle(listInner.get(arg2)).setMessage(String.valueOf(arg3)).show();   
   
  }
  
}

}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <ListView
  android:id="@+id/lvjokes"
  android:layout_height="wrap_content"
  android:layout_width="fill_parent"
  ></ListView>
</LinearLayout>
每项布局文件(模板):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:orientation="vertical"
  android:layout_height="wrap_content">
<TextView android:id="@+id/tvTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
  <RelativeLayout
android:id="@+id/llDes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView android:id="@+id/tvContent"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>  
  <RatingBar android:id="@+id/rbLevel"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
   style="?android:attr/ratingBarStyleSmall"
    android:layout_alignParentRight="true"
    android:rating="3"
    android:numStars="5"
  ></RatingBar>
</RelativeLayout>
</LinearLayout>

 

  • 大小: 13.2 KB
分享到:
评论
1 楼 weisi2375 2012-07-05  
很不错。。。

相关推荐

    安卓listview自定义adapter

    安卓listview自定义adapter包括demo和一些其他自定义绑定的代码

    ListView中使用自定义Adapter及时更新数据

    本篇将详细讲解如何在ListView中使用自定义Adapter来实现数据的及时更新。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来与数据源进行交互,Adapter是连接数据集和视图的桥梁。它负责从数据集中...

    listview 自定义adapter的例子demo

    在实际应用中,为了满足各种界面设计需求,通常需要自定义ListView的Adapter。本示例将详细介绍如何自定义ListView的Adapter,以实现个性化的数据展示。 首先,我们需要理解Adapter的作用。Adapter是连接ListView和...

    Android自定义adapter的listview

    为了实现更加灵活和丰富的界面展示,我们通常需要对ListView进行自定义,这涉及到自定义Adapter的使用。自定义Adapter允许我们根据需求定制ListView的每一项视图,以适应不同的数据结构和界面设计。 首先,我们需要...

    Android中ListView+Adapter

    本文将深入探讨如何在Eclipse开发环境中利用ListView结合Adapter来展示数据。 首先,`ListView`是一个可滚动的视图,用于显示一组项目,每个项目都是一个单独的视图。它通过复用视图(ViewHolder模式)提高性能,...

    在ListView中自定义Adapter

    为便于学习自定义的Adapter,本案例的界面未进行美化,功能已经实现,对于其中的getView(int position,View view ,...本案例功能及其简单,只涉及ListView中自定义适配器,没有对其中的点击等其他操作进行展开。

    ListView中实现自定义图片背景,无闪烁,背景不随ScrollBar移动

    然而,在实际应用中,我们经常需要对ListView进行自定义,以满足各种界面设计需求。本篇将重点讲解如何在ListView中实现自定义图片背景,同时确保背景在滚动时无闪烁,且不随ScrollBar移动。 首先,我们需要明白...

    Android listview例子, 自定义Adapter:含Button控件

    在本示例中,我们关注的是如何在ListView中集成Button控件,并通过自定义Adapter来实现这一功能。这涉及到Android UI设计、数据绑定和事件处理等多个方面。 首先,我们了解ListView的基本原理。ListView通过Adapter...

    Android之自定义Adapter的ListView

    接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上下文和数据集作为构造函数参数。然后,通过`listView.setAdapter(listViewAdapter)`将Adapter绑定到ListView上。 在`getView...

    ListView的自定义适配器Adapter

    为了使ListView显示的数据更加丰富多样,我们通常需要自定义适配器(Adapter)。本文将深入探讨如何创建和使用ListView的自定义适配器,以及它的工作原理。 首先,我们要理解适配器在ListView中的角色。适配器是...

    ListView自定义Adapter实现多视图Item

    最后,记得在Activity或Fragment中设置自定义Adapter到ListView上,这样ListView就能正确地展示多视图Item了。 通过以上步骤,我们就可以实现ListView自定义Adapter的多视图Item功能。这不仅可以使列表更具多样性,...

    listview自定义Adapter实现仿qq页面

    自定义Adapter是Android开发中的一个重要环节,它允许我们根据需求定制ListView的显示样式和交互方式。 首先,理解ListView的工作原理至关重要。ListView通过Adapter获取数据,并将其转化为可显示的View。Adapter就...

    Android ListView 自定义adapter好友列表

    4. 在Activity或Fragment中设置Adapter:将数据集和自定义Adapter传入ListView,并设置Adapter。 ```java List&lt;Friend&gt; friends = ...; // 初始化好友列表 FriendListAdapter adapter = new FriendListAdapter(this...

    TabHost中填充自定义ListView

    在Android开发中,`TabHost` 是一个非常重要的组件,用于实现多标签页面的切换,而将自定义的`ListView`填充到`TabHost`中则可以构建出复杂的交互界面。下面我们将详细探讨如何实现这一功能。 首先,我们需要了解`...

    ListView的使用自定义BaseAdapter

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

    Android listview与adapter用法

    在Android开发中,ListView是展示大量数据的一种常见方式,而Adapter则是实现ListView数据绑定的关键组件。本篇文章将详细探讨Android中的Adapter用法及其在ListView中的应用。 1. **Adapter的概念** - `Adapter`...

    android-listview列表伸缩自定义组件

    对于ListView的伸缩功能,我们可能需要创建一个继承自ListView的自定义Adapter,该Adapter能够处理点击事件,并在需要时显示或隐藏附加的详细信息面板。 在实现过程中,关键在于监听ListView的点击事件。这可以通过...

    Android ListView 选中效果 自定义

    然后,在Activity或Fragment中设置ListView的Adapter,并在Adapter的getView()方法中复用convertView,以提高性能: ```java public class MyAdapter extends BaseAdapter { // ... @Override public View ...

    Listview自定义Adapter显示省名并响应item事件

    本教程将深入讲解如何使用自定义Adapter来显示省名,并响应ListView中的item点击事件。Adapter是连接ListView和数据源的关键,它负责将数据转化为ListView可显示的视图。 首先,我们需要创建一个自定义的Adapter类...

    ListView中Adapter、填充器

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,比如联系人列表、邮件列表等。要让ListView显示数据,就需要用到Adapter和填充器(Filler)。这两个概念是理解Android列表视图工作原理的...

Global site tag (gtag.js) - Google Analytics