Android SimpleAdapter

HolderAdapter background

Android's AdapterView is used more, ListView, GridView, Spinner, etc. The native BaseAdapter does not support ViewHolder. Every time, define the inner class, inflater the root layout, set the clicklistener for the internal view of the item and forward it to the caller of the adapter, etc. . It feels very cumbersome to write more times, so I wrote a simple package to simplify the writing of Adapter and connect the warehouse to http://git.oschina.net/phodev/SimpleAdapter .

Introduction to main documents

1. CommonAdapter.java inherits from BaseAdapter, adds common functions, specifies List data source through generics, implements the getCount function instead of subclasses, and adds bindClick to implement Adapter's OnItemClickListener.

2. BaseViewHolder.java is combined with HolderAdapter to implement a view initialization method similar to Activity onCreate->setContentView->findViewById.

3. HolderAdapter.java inherits from CommonAdapter and is mainly used to drive BaseViewHolder to work.

Instructions

1, Adapter definition

public class SampleHolderAdapter extends HolderAdapter<Object> {
    //定义Item内部的点击事件,如果不需要可以不定义
    public static final int CLICK_ACTION_ADD = 1;
    public static final int CLICK_ACTION_UPDATE = 2;
    public static final int CLICK_ACTION_DELETE = 3;
    //构造函数配置数据源(可选,或者之后通过setData更新)
    public SampleHolderAdapter(List<Object> data) {
        super(data);
    }

    @Override
    public BaseViewHolder<?> createViewHolder(int position) {
        //创建期望的 ViewHolder
        return new ViewHolder();
    }
    
    class ViewHolder extends BaseViewHolder<Object> {
        Button btn1, btn2, btn3;

        @Override
        protected void onCreate(Context context, ViewGroup parent) {
            //ViewHolder创建后onCreate会被执行1次
            setContentView(R.layout.item_test);//setContent支持View或者layout id
            btn1 = (Button) findViewById(R.id.btn1);//findViewById
            btn2 = (Button) findViewById(R.id.btn2);
            btn3 = (Button) findViewById(R.id.btn3);
        }

        @Override
        protected void onDataChanged(int position, Object data) {
            //adapter getView的时候onDataChanged会被执行一次
            btn1.setText("add " + position);
            btn2.setText("update " + position);
            btn3.setText("delete " + position);
            //
            bindClick(btn1, position, CLICK_ACTION_ADD);//绑定ItemClick,每次都需bind
            bindClick(btn2, position, CLICK_ACTION_UPDATE);
            bindClick(btn3, position, CLICK_ACTION_DELETE);
        }
    }

}

2, Adapter use

//数据源    
 private final ArrayList<Object> mData = new ArrayList<>();
 //创建Adapter并绑定数据源
 private final SampleHolderAdapter mAdapter = new SampleHolderAdapter(mData);

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     mListView = (ListView) findViewById(R.id.listview);
     //绑定Adapter
     mListView.setAdapter(mAdapter);
     //设置click listener(由于CommonAdapter支持,并通过bindClick声明)
     mAdapter.setOnItemClickListener(onItemClickListener);
 }

 //ClickListener实现
 private OnItemClickListener onItemClickListener = new OnItemClickListener() {
     @Override
     public void onItemClick(CommonAdapter<?> adapter, View v, int position, int action) {
         switch (action) {//action就是我们SampleHolderAdapte中定义并且bindClick的value
             case SampleHolderAdapter.CLICK_ACTION_ADD:
                 toast(getContext(), position + " add click");
                 break;
             case SampleHolderAdapter.CLICK_ACTION_UPDATE:
                 toast(getContext(),position + " update click");
                 break;
             case SampleHolderAdapter.CLICK_ACTION_DELETE:
                 toast(getContext(), position + " delete click");
                 break;
         }
     }
 };

This completes the code defined and used.

{{o.name}}
{{m.name}}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324133789&siteId=291194637