`

android 重写BaseAdapter类

 
阅读更多
1.自定义Adapter
主要继承的方法是getCount()和getView()
public class MyAdapter extends BaseAdapter {

		private LayoutInflater mInflater;

		public MyAdapter(Context context) {
			this.mInflater = LayoutInflater.from(context);
		}

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

		@Override
		public Object getItem(int position) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}
		
		@SuppressWarnings("all")
		@Override
		public View getView(final int position, View convertView,
				ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				holder = new ViewHolder();
				// 可以理解为从vlist获取view 之后把view返回给ListView
				convertView = mInflater.inflate(R.layout.listitem, null);
				holder.title = (TextView) convertView.findViewById(R.id.title);
				holder.info = (TextView) convertView.findViewById(R.id.info);
				holder.viewBtn = (Button) convertView
						.findViewById(R.id.view_btn);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			holder.title.setText((String) mData.get(position).get("title"));
			holder.info.setText((String) mData.get(position).get("info"));
			holder.viewBtn.setTag(position);
			// 给Button添加单击事件 添加Button之后ListView将失去焦点 需要的直接把Button的焦点去掉
			holder.viewBtn.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					showInfo(position);
				}
			});
			// holder.viewBtn.setOnClickListener(MyListener(position));
			return convertView;
		}
		
	}

// ListItem中的实体类
	public final class ViewHolder {
		public TextView title;
		public TextView info;
		public Button viewBtn;
	}
// 弹框的写法
public void showInfo(int position) {

		ImageView img = new ImageView(ListViewActivity.this);
		img.setImageResource(R.drawable.b);
		new AlertDialog.Builder(this)
				.setView(img)
				.setTitle("详情" + position)
				.setMessage("菜名:" + title[position] + "   价格:" + info[position])
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				}).show();
	}


2.ListItem的布局文件
以后写item布局文件时都可以使用这个
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="70.0dip"
    android:background="@drawable/item"
    android:drawingCacheQuality="high"
    android:minHeight="70.0dip"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/sItemIcon"
        android:layout_width="80dip"
        android:layout_height="60dip"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="5dip"
        android:background="@drawable/bg_img_coner"
        android:padding="1dip"
        android:scaleType="fitXY"
        android:src="@drawable/b" 
        android:contentDescription="@string/app_name"/>

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/sItemIcon"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dip"
        android:layout_toRightOf="@+id/sItemIcon"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="@color/listTitle"
        android:textSize="20.0sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_marginLeft="20dip"
        android:layout_marginTop="20dip"
        android:layout_toRightOf="@id/sItemIcon"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:textColor="#ff4400"
        android:textSize="12.0sp" />

    <Button
        android:id="@+id/view_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="15dip"
        android:background="@drawable/btn_detail_selecter"
        android:text="@string/detail" />
</RelativeLayout>

3.selector内容
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/btn_detail_normal" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"/>
    <item android:drawable="@drawable/btn_detail_pressed" android:state_enabled="true" android:state_pressed="true"/>
    <item android:drawable="@drawable/btn_detail_pressed" android:state_enabled="true" android:state_focused="true"/>

</selector>
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    android BaseAdapter listView优化

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

    android适应横竖屏登录模块toolsbar重写BaseAdapter.zip

    本项目"android适应横竖屏登录模块toolsbar重写BaseAdapter.zip"主要展示了如何实现一个登录界面,该界面能够根据设备的横竖屏自动调整布局,并且在主页面中对ToolBar进行了自定义,利用重写的BaseAdapter实现了类似...

    重写BaseAdapter的样例

    在Android开发中,`BaseAdapter` 是一个基础的适配器类,用于将数据绑定到各种视图容器,如ListView、GridView等。本篇将详细阐述如何重写`BaseAdapter`,并提供一个具体的示例。 `BaseAdapter`是Android SDK提供的...

    BaseAdapter的使用与优化

    BaseAdapter是一个抽象类,它是Adapter接口的一个实现,主要负责数据的获取、视图的创建和更新。在自定义Adapter时,我们需要继承BaseAdapter,并重写以下四个关键方法: 1. `getCount()`: 返回数据集的大小,即...

    PullToRefresh使用详解(二)---重写BaseAdapter 源码

    《PullToRefresh使用详解(二)---重写BaseAdapter》博文对应源码,讲解了复杂XML下拉项,如何使用PullToRefresh实现下拉刷新的问题。对应博客地址:http://blog.csdn.net/harvic880925/article/details/17708409

    android应用源码Android重写listview实现下拉刷新.zip

    本教程将通过一个名为"android应用源码Android重写listview实现下拉刷新.zip"的压缩包,深入探讨如何在Android中自定义ListView并实现下拉刷新功能。这个压缩包包含了一份用于学习和参考的源码,主要涉及以下几个...

    Android中ListView,SQLite,BaseAdapter的结合[参照].pdf

    3. BaseAdapter类 BaseAdapter是一个抽象类,它为Adapter提供了基础的实现,常用于自定义数据适配器。如果标准的Adapter类(如ArrayAdapter或CursorAdapter)不能满足特定的需求,开发者可以通过继承BaseAdapter并...

    baseAdapter

    `RecyclerView.Adapter` 是`RecyclerView` 的官方适配器接口,而`BaseAdapter` 是我们常说的自定义适配器基类,它不是Android SDK内置的,而是开发者为了方便复用和减少代码量而创建的一个抽象类。这个`BaseAdapter`...

    Android自定义BaseAdapter

    `BaseAdapter`是Android提供的一个抽象类,它实现了`ListAdapter`接口,主要用于为各种视图控件(如ListView、GridView)提供数据。通过自定义`BaseAdapter`,开发者可以自由地设计数据模型、视图布局和数据绑定逻辑...

    基于Android使用的重写类

    在Android开发中,重写类(Overriding Classes)是一个核心概念,它允许开发者扩展和定制已存在的类以满足特定需求。Android系统是基于Java语言构建的,因此它遵循面向对象编程的原则,包括类的继承、封装和多态性。...

    Android 重写Gallery

    本文将深入探讨如何在Android中重写`Gallery`以实现动画切换效果。 首先,理解`Gallery`的基本原理是至关重要的。`Gallery`本质上是一个水平滚动的`LinearLayout`,它支持触摸滑动以及自动滚动功能。重写`Gallery`...

    Android必学-BaseAdapter的使用与优化

    首先,BaseAdapter是Android SDK提供的一种适配器类,用于连接数据源(如ArrayList)与UI组件。它的工作原理是通过重写其四个关键方法:`getCount()`、`getItem()`、`getItemId()`和`getView()`来实现数据的显示。`...

    android开发之BaseAdapter

    首先,`BaseAdapter`是Android SDK提供的一个抽象类,它实现了`Adapter`接口,主要负责处理数据与UI元素之间的绑定。当你需要自定义列表或者网格视图的显示逻辑时,通常会继承`BaseAdapter`并重写其中的方法。 在...

    Android中BaseAdapter的用法分析与理解

    首先,BaseAdapter是Android SDK提供的一种适配器抽象类,它实现了Adapter接口并提供了默认实现。Adapter的主要职责是作为数据源和UI组件之间的桥梁,将数据转换为视图元素。BaseAdapter允许开发者自定义数据到视图...

    baseadapter

    BaseAdapter是Android SDK提供的一种抽象适配器类,它为自定义适配器提供了一个基础模板。开发者可以根据实际需求继承BaseAdapter,重写其中的方法,以实现将自定义数据与视图的适配。BaseAdapter的主要职责是将...

    Android之ListView+BaseAdapter左右按键切换

    在Android中,这通常需要重写Activity的`onKeyDown()`方法。在这个方法里,我们需要判断按下的是左键还是右键,然后根据按键事件改变ListView的选中项,同时更新Adapter的数据。例如,当按下左键时,选中项向前移动...

    Android中ListView,SQLite,BaseAdapter的结合源码

    BaseAdapter是Android提供的一个抽象类,它实现了Adapter接口,为ListView提供了数据绑定功能。开发者需要继承BaseAdapter并重写其中的方法,如`getCount()`返回数据集大小,`getItem()`获取指定位置的数据,`...

    android ListActivity 和 BaseAdapter 实例

    `BaseAdapter`是一个抽象类,它是所有自定义适配器的基类。它实现了`Adapter`接口,提供了将数据绑定到ListView的基础框架。当你需要自定义ListView的每个项的视图时,通常会扩展`BaseAdapter`。在这个过程中,你...

    Android 重写Listview实现左滑删除功能

    2. **适配器扩展**:继承自BaseAdapter或ArrayAdapter,重写`getView()`方法。在这个方法里,我们将为每个列表项实例化SlideView,并根据数据源设置内容和删除按钮的状态。 3. **手势处理**:在SlideView中处理滑动...

Global site tag (gtag.js) - Google Analytics