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

万能适配器

阅读更多
package bwie.universaladapter;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView lv;
    int[] arr = {R.mipmap.img0, R.mipmap.img1, R.mipmap.img2, R.mipmap.img3,
            R.mipmap.img4, R.mipmap.img5, R.mipmap.img6,
            R.mipmap.img7, R.mipmap.img8, R.mipmap.img9};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        List<Bean> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(new Bean(arr[i], "zhangsan" + i));
        }
        lv.setAdapter(new CommonAdapter<Bean>(this, list, R.layout.item) {
            @Override
            public void convert(ViewHolder helper, Bean bean) {
                TextView tv = helper.getView(R.id.textViews);
                tv.setText(bean.text);
                ImageView image = helper.getView(R.id.images);
                image.setImageResource(bean.getImage());
            }
        });
    }
}

 

package bwie.universaladapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;


public abstract class CommonAdapter<T> extends BaseAdapter {
    protected LayoutInflater mInflater;
    protected Context context;
    protected List<T> mDatas;
    protected final int mItemLayoutId;

    public CommonAdapter(Context context, List<T> mDatas, int mItemLayoutId) {
        this.mInflater = LayoutInflater.from(context);
        this.context = context;
        this.mDatas = mDatas;
        this.mItemLayoutId = mItemLayoutId;
    }

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

    @Override
    public T getItem(int position) {
        return mDatas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder = getViewHolder(position, convertView, parent);
        convert(viewHolder, getItem(position));
        return viewHolder.getConvertView();
    }

    public abstract void convert(ViewHolder helper, T item);

    private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) {
        return ViewHolder.get(context, convertView, parent, mItemLayoutId, position);

    }


}

 

package bwie.universaladapter;

import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class ViewHolder {

    private final SparseArray<View> mView;
    private View mConverView;
    private int mPosition;

    private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
        this.mView = new SparseArray<>();
        mConverView = LayoutInflater.from(context).inflate(layoutId, parent, false);
        this.mPosition = position;
        //settag
        mConverView.setTag(this);
    }

    public View getConvertView() {
        return mConverView;
    }

    /**
     * 拿到一个ViewHolder对象
     *
     * @param context
     * @param convertView
     * @param layoutId
     * @param position
     * @return
     */
    public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
        if (convertView == null) {
            return new ViewHolder(context, parent, layoutId, position);
        }
        return (ViewHolder) convertView.getTag();
    }

    /**
     * 通过控件的Id获取对于的控件,如果没有则加入views
     *
     * @param viewId
     * @param <T>
     * @return
     */
    public <T extends View> T getView(int viewId) {
        View view = mView.get(viewId);
        if (view == null) {
            view = mConverView.findViewById(viewId);
            mView.put(viewId, view);
        }
        return (T) view;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setText(int viewId, String text) {
        TextView tv = getView(viewId);
        tv.setText(text);
        return this;
    }

    public int getPosition() {
        return mPosition;
    }


}

 

分享到:
评论

相关推荐

    鸿洋recyclerview万能适配器实战

    【鸿洋recyclerview万能适配器实战】 在Android开发中,RecyclerView因其高效、灵活的特性,成为展示列表数据的标准组件。本项目基于鸿洋(Hongyang)的RecyclerView万能适配器,旨在通过实例来深入理解并掌握...

    android之listview万能适配器

    "android之listview万能适配器"概念旨在创建一个通用、灵活的适配器,能够适应各种不同的数据结构和界面需求。以下将详细解析这个主题。 1. **适配器的作用**: - 适配器是`ListView`与数据模型之间的桥梁,它将...

    ListView的万能适配器

    为了提高代码的复用性和可维护性,开发者通常会创建一个"万能适配器"(Universal Adapter),来适应各种不同类型的ListView需求。这个适配器的设计目标是简化数据绑定和视图更新的过程,使得在处理多种数据源时,只...

    android 万能适配器

    "Android 万能适配器"的概念旨在创建一个通用的、可复用的适配器模板,以简化开发过程并提高代码的可维护性。下面将详细介绍这个主题,以及如何构建和应用这种适配器。 1. **适配器的原理**: - Android中的适配器...

    万能适配器项目案例

    【万能适配器项目案例】是一个典型的Android开发实践,主要关注如何灵活运用Adapter机制来实现ListView等组件的数据展示。在Android中,Adapter是连接数据源与视图的关键桥梁,它将数据转换为可以在UI上显示的视图项...

    Android 万能适配器

    在Android开发中,"Android 万能适配器"是一个常用的概念,主要用于解决ListView、GridView等可滚动视图中的数据绑定问题。适配器(Adapter)是Android框架中的一种核心组件,它作为数据源和视图之间的桥梁,使得...

    Android-一个包含RecyclerView万能适配器和上拉刷新下拉加载更多的Demo

    本Demo主要展示了如何在Android应用中使用RecyclerView结合万能适配器和上拉刷新、下拉加载更多功能,以提升用户体验。以下是关于这些知识点的详细说明: 1. RecyclerView: RecyclerView是一个高效的数据视图容器...

    Android打造listview万能适配器

    本文将深入探讨如何打造一个万能适配器,以实现更灵活的数据绑定和视图管理。 首先,我们要理解适配器的作用。适配器是连接数据源和ListView的桥梁,它负责将数据转化为ListView可显示的View。在Android中,最常见...

    Android GridView和ListView的万能适配器源码

    它们都基于Adapter机制,而“万能适配器”则是为了解决多种数据类型显示和复用问题的一种通用解决方案。本文将深入探讨Android GridView和ListView的万能适配器源码,帮助开发者理解其工作原理并提升应用开发效率。 ...

    安卓万能适配器Adapter

    "安卓万能适配器Adapter"的概念旨在提供一种通用的解决方案,减少开发者编写重复代码的时间,提高开发效率。这个适配器设计是基于面向对象编程原则,允许我们灵活地将各种数据类型与视图元素进行绑定。 首先,我们...

    ListView&GridView万能适配器&万能ViewHold

    "ListView&GridView万能适配器&万能ViewHold"就是为了解决这个问题而设计的工具类,它简化了适配器和ViewHolder的编写过程,提高了代码的可维护性和效率。 1. **ListView和GridView基础** - **ListView**:一个...

    Android ListView 万能适配器

    "Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...

    更万能的万能适配器

    标题中的“更万能的万能适配器”暗示了我们正在讨论的是一个通用的、功能强大的Adapter实现,它旨在简化开发过程,避免开发者频繁地重复编写相似的代码。 在传统的ListView或GridView适配器使用中,开发者通常需要...

    万能适配器+PullToRefresh下拉刷新

    在Android开发中,适配器(Adapter)是连接数据源和UI组件的关键,而"万能适配器"则是为了简化开发过程中对于不同类型的数据显示所设计的一种通用解决方案。它允许开发者通过一个统一的适配器处理多种数据模型,减少...

    Android基础——快速开发之打造万能适配器

    本篇将详细讲解如何构建一个“万能适配器”,以提高代码复用性和开发效率。 首先,我们需要理解适配器的基本工作原理。适配器类继承自BaseAdapter或其子类,如ArrayAdapter,它需要实现其中的几个关键方法:...

    项目安卓万能适配器demo以及带刷新的XListView

    在Android开发中,适配器(Adapter)是连接数据源与UI组件的关键桥梁,而万能适配器(Universal Adapter)则是为了简化开发过程,提供一个可以处理多种数据类型的通用解决方案。XListView则是一个功能强大的下拉刷新...

Global site tag (gtag.js) - Google Analytics