Code Monkey home page Code Monkey logo

adapter's Introduction

Adapter

A quick adapter library for ListView, GridView, RecyclerView, ViewPager, and ExpandableListView on Android. Multiple view types is supported for ListView, GrideView, and RecyclerView.

Download Android Arsenal

中文教程

Features

  • Based on template type
  • Simple and clean API
  • Super easy to use and much less code
  • Multiple view type support for ListView, GrideView, and RecyclerView

BaseAdapterHelper

  • setText() calls setText(String) on any TextView.
  • setAlpha() calls setAlpha(float) on any View.
  • setVisible() calls setVisibility(int) on any View.
  • linkify() calls Linkify.addLinks(view, ALL) on any TextView.
  • setTypeface() calls setTypeface(Typeface) on any TextView.
  • setProgress() calls setProgress(int) on any ProgressBar.
  • setMax() calls setMax(int) on any ProgressBar.
  • setRating() calls setRating(int) on any RatingBar.
  • setImageResource() calls setImageResource(int) on any ImageView.
  • setImageDrawable() calls setImageDrawable(Drawable) on any ImageView.
  • setImageBitmap() calls setImageBitmap(Bitmap) on any ImageView.
  • setImageUrl() uses Glide to download the image and put it in an ImageView.
  • setOnClickListener()
  • setOnTouchListener()
  • setOnLongClickListener()
  • setOnCheckedChangeListener()
  • setTag()
  • setChecked()
  • setAdapter()

Gradle

compile 'com.github.thepacific:adapter:{lastest version}'

RecyclerView, ListView, and GrideView

  • RecyclerAdapterHelper and RecyclerAdapter for RecyclerView
  • AdapterHelper and Adapter for ListView and GridView

Single layout

  • Just override convert()
adapter = new Adapter<ExploreBean>(context, R.layout.item) {
            @Override
            protected void convert(final AdapterHelper helper, ExploreBean exploreBean) {
                final int position = helper.getPosition();
                helper
                        .setText(R.id.tv_explore_name, "__Index: " + String.valueOf(position))
                        .setText(R.id.tv_explore_desc, exploreBean.getDescription())
                        .getItemView().setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickSnack(position);
                    }
                });
            }
        };      

Multiple view types layout

  • Need to override convert(), getItemViewType(), and getLayoutResId()
adapter = new Adapter<ExploreBean>(context, R.layout.item, R.layout.item0, R.layout.item1) {
            @Override
            protected void convert(final AdapterHelper helper, ExploreBean exploreBean) {
                final int position = helper.getPosition();
                if (position % 3 == 0) {
                    helper.setText(R.id.tv_explore_name, "__Index: " + String.valueOf(position));
                } else if (position % 3 == 1) {
                    helper.setImageResource(R.id.img_explore_icon, exploreBean.getIconResId());
                } else {
                    helper.getItemView().setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            clickSnack(position);
                        }
                    });
                }
            }

            /**
             * Must be overridden, when you have more than one item layout.
             * No need to be overridden, when you only have one item layout.
             */
            @Override
            public int getItemViewType(int position) {
                if (position % 3 == 0) {
                    return 0;
                } else if (position % 3 == 1) {
                    return 1;
                } else {
                    return 2;
                }
            }

            /**
             * Get layoutResId from view type  @see #getItemViewType(int position) return value.
             * Must be overridden, when you have more than one item layout.
             * No need to be overridden, when you only have one item layout.
             */
            @Override
            public int getLayoutResId(int viewType) {
                if (viewType == 0) {
                    return R.layout.item;
                } else if (viewType == 1) {
                    return R.layout.item0;
                } else {
                    return R.layout.item1;
                }
            }
        };

For more features, you can extend their Base Adapter

ExpandableListView

  • ExpandableAdapterHelper and ExpandableAdapter for ExpandableListView
  • Need to override getChildren(),convertGroupView() and convertChildView()
adapter = new ExpandableAdapter<MenuBean, ExploreBean>(context, R.layout.item_group, R.layout.item_child) {
            @Override
            protected List<ExploreBean> getChildren(int groupPosition) {
                return get(groupPosition).getExploreBeanList();
            }

            @Override
            protected void convertGroupView(final boolean isExpanded, final ExpandableAdapterHelper helper, MenuBean item) {
                helper.setImageResource(R.id.img_explore_icon, item.getIconResId())
                        .setText(R.id.tv_explore_name, item.getDescription())
                        .getItemView().setTag("Example");
            }

            @Override
            protected void convertChildView(boolean isLastChild, final ExpandableAdapterHelper helper, ExploreBean item) {
                helper.getItemView().setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickSnack(helper.getGroupPosition(), helper.getChildPosition());
                    }
                });
                helper.getItemView().setTag("hello world");
            }
        };

For more features, you can extend its Base Adapter

ViewPager

  • ViewPagerAdapter, FragmentPagerAdapter2, and FragmentStatePagerAdapter2 for ViewPager

With layout

  • Just override convert()
adapter = new ViewPagerAdapter<String>(context,R.layout.pager_view) {
            @Override
            protected void convert(PagerAdapterHelper helper, String item) {
                helper.setBackgroundRes(R.id.img_view, R.drawable.exa);
            }
        };

Without layout and create view from Java code

  • Need to override convert() and createView()
adapter = new ViewPagerAdapter<String>(context) {
            @Override
            protected void convert(PagerAdapterHelper helper, String item) {
                helper.setBackgroundRes(R.id.img_view, R.drawable.exa);
            }

            // Just override createView()
            @Override
            protected View createView(ViewGroup container, int position) {
                FrameLayout fl = new FrameLayout(context);
                ImageView imageView = new ImageView(context);
                FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(480, 480, Gravity.CENTER);
                imageView.setId(R.id.img_view);
                fl.addView(imageView);
                imageView.setLayoutParams(lp);
                // Don't add fl to container, it does in helper
                return fl;
            }
        };

For more features, you can extend its Base Adapter

Others

  • onEmptyData() and onHasData() callback, when data size is 0. Use to display and hide empty tip view.

Dependencies

compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:23.3.0'

##Thanks

License

The MIT License

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.