Simplified Adapter writing and findViewById () method optimization, adapterview

Source: Internet
Author: User

Simplified Adapter writing and findViewById () method optimization, adapterview


First write a ViewHolder:

Public class ViewHolder {private View mConvertView; private Activity mActivity; private SparseArray <View> mViewArray; // SparseArray public ViewHolder (View convertView) referenced by View {this. mConvertView = convertView;} public ViewHolder (Activity activity) {this. mActivity = activity;} public <T extends View> T get (int viewId) {// obtain View if (mActivity = null) through ViewId) {// ViewHolder SparseArray <View> viewHolder = (SparseArray <View>) mConvertView of ListAdapter. getTag (); if (viewHolder = null) {viewHolder = new SparseArray <View> (); mConvertView. setTag (viewHolder);} View childView = viewHolder. get (viewId); if (childView = null) {childView = mConvertView. findViewById (viewId); viewHolder. put (viewId, childView);} return (T) childView;} else {// ViewHolder if (mViewArray = null) of the Activity) {mViewArray = new SparseArray <View> ();} View childView = mViewArray. get (viewId); if (childView = null) {childView = mActivity. findViewById (viewId); mViewArray. put (viewId, childView);} return (T) childView ;}} public void setText (int viewId, String text) {// set Text (TextView) through ViewId) get (viewId )). setText (text);} public void setText (int viewId, Spanned text) {// set Text (TextView) get (ViewId) through viewId )). setText (text);} public void setTextColor (int viewId, int color) {// set TextColor (TextView) get (ViewId) through viewId )). setTextColor (color);} public void setImageResource (int viewId, int resId) {// set the image (ImageView) get (ViewId) by viewId )). setImageResource (resId);} public void setImageBitmap (int viewId, Bitmap bm) {// set the image (ImageView) get (ViewId) through viewId )). setImageBitmap (bm);} public void setImageDrawable (int viewId, Drawable drawable) {// set the image (ImageView) get (ViewId) through viewId )). setImageDrawable (drawable);} public void setImageUrl (int id, String url) {// sets the network image through ViewId // Rosemary. loadImage (url, (ImageView) get (id);} public void setImageUrl (int id, String url, int resId) {// sets the network image through ViewId // Rosemary. loadImage (url, (ImageView) get (id), resId);} public void setVisibility (int viewId, int visibility) {// hide and display get (ViewId) through viewId settings ). setVisibility (visibility);} public void setOnClickListener (int viewId, View. onClickListener l) {// click to listen to get (ViewId) through viewId settings ). setOnClickListener (l );}}


Then write a BaseActivity:

public class BaseActivity extends ActionBarActivity {    protected ViewHolder mHolder;    public <T> T $(int viewID) {        return (T) mHolder.get(viewID);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        BaseApplication.getInstance().addActivity(this);        mHolder = new ViewHolder(this);    }}

Encapsulate a simple Adapter:

Public abstract class ListAdapter <T> extends BaseAdapter {protected Context mContext; protected LayoutInflater mInflater; protected List <T> mList; // dataset protected int mLayoutID; // layout resource ID protected ListAdapter () {} public ListAdapter (Context ctx, List <T> list, int layoutID) {mContext = ctx; mInflater = LayoutInflater. from (ctx); mList = list; mLayoutID = layoutID;} @ Override public int getCount () {If (mList! = Null & mList. size ()> 0) return mList. size (); return 0 ;}@ Override public T getItem (int position) {if (mList! = Null & mList. size ()> 0) return mList. get (position); return null ;}@ Override public long getItemId (int position) {return position ;}@ Override public View getView (int position, View convertView, ViewGroup parent) {if (convertView = null) convertView = mInflater. inflate (mLayoutID, null); ViewHolder holder = new ViewHolder (convertView); onBind (position, getItem (position), holder); return convertView ;} /***** bind data */protected abstract void onBind (int position, T item, ViewHolder holder );}

Effect:

Public class BlacklistActivity extends VolleyActivity implements IInit, detail {private ListView mListView; private BlacklistViewModel mViewModel = new BlacklistViewModel (); private ListAdapter <BlacklistViewModel> mAdapter; @ Override protected void onCreate (Bundle entity) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_blacklist); init () ;}@ Override pu Blic void init () {ActionBarUtil. setup (this, "my blacklist"); mListView = $ (R. id. lv_blacklist); fetchData (FIRST) ;}@ Override public void fetchData (int tag) {toggleProgress (true); if (tag = FIRST) {// request blacklist list GetBlackBuyerListParam param = new GetBlackBuyerListParam (mViewModel. getPageIndex (), Data. PAGE_SIZE_LARGE, Data. getUserID (); UserApi. getBlackBuyerList (this, param, tag);} else if (tag = SECOND) {// Remove the blacklist RemoveBlackBuyerParam param = new RemoveBlackBuyerParam (Data. getUserID (), mViewModel. getList (). get (mViewModel. getCurrentPosition ()). getModel (). getBuyerID (); UserApi. removeBlackBuyer (this, param, tag) ;}@ Override public void updateUI (Object response, int tag) {if (response = null) return; if (tag = FIRST) {mViewModel. inflate (response); // blacklist list if (mAdapter = null) {mAdapter = New ListAdapter <BlacklistViewModel> (this, mViewModel. getList (), R. layout. item_blacklist) {@ Override protected void onBind (final int position, final BlacklistViewModel item, ViewHolder holder) {holder. setImageUrl (R. id. iv_avatar, item. getModel (). getHeadImageUrl (), R. drawable. defaultportrait); holder. setOnClickListener (R. id. iv_avatar, new View. onClickListener () {@ Override public void onClick (Vie W v) {IntentUtil. toPersonInfo (BlacklistActivity. this, item. getModel (). getBuyerID () ;}}); holder. setText (R. id. TV _name, item. getModel (). getBuyerName (); holder. setOnClickListener (R. id. btn_remove, new View. onClickListener () {@ Override public void onClick (View v) {mViewModel. setCurrentPosition (position); new AlertDialog. builder (BlacklistActivity. this ). setMessage (String. format ("are you sure you want to remove" % s "from the blacklist? ", Item. getModel (). getBuyerName ())). setPositiveButton (android. r. string. OK, new DialogInterface. onClickListener () {@ Override public void onClick (DialogInterface dialog, int which) {fetchData (SECOND );}}). setNegativeButton (android. r. string. cancel, null ). create (). show () ;}}) ;}}; mListView. setAdapter (mAdapter); mListView. setEmptyView (findViewById (R. id. iv_no_data);} else {mAdapter. notifyDataSet Changed () ;}} else if (tag = SECOND) {if (Boolean) response) {ToastUtil. show (this, "removed successfully! "); MViewModel. getList (). remove (mViewModel. getCurrentPosition (); mAdapter. policydatasetchanged ();}}}}

Summary:

Previously, mListView = (ListView) findViewById (R. id. lv_blacklist) was written );

Now you only need to write mListView =$ (R. id. lv_blacklist );


And the adapter is simplified into several lines of code:

MAdapter = new ListAdapter <BlacklistViewModel> (this, mViewModel. getList (), R. layout. item_blacklist) {@ Override protected void onBind (final int position, final BlacklistViewModel item, ViewHolder holder) {holder. setImageUrl (R. id. iv_avatar, item. getModel (). getHeadImageUrl (), R. drawable. defaultportrait); holder. setOnClickListener (R. id. iv_avatar, new View. onClickListener () {@ Override public void onC Lick (View v) {IntentUtil. toPersonInfo (BlacklistActivity. this, item. getModel (). getBuyerID () ;}}); holder. setText (R. id. TV _name, item. getModel (). getBuyerName (); holder. setOnClickListener (R. id. btn_remove, new View. onClickListener () {@ Override public void onClick (View v) {mViewModel. setCurrentPosition (position); new AlertDialog. builder (BlacklistActivity. this ). setMessage (String. format ("OK to remove" % s "from the blacklist? ", Item. getModel (). getBuyerName ())). setPositiveButton (android. r. string. OK, new DialogInterface. onClickListener () {@ Override public void onClick (DialogInterface dialog, int which) {fetchData (SECOND );}}). setNegativeButton (android. r. string. cancel, null ). create (). show () ;}}) ;}}; mListView. setAdapter (mAdapter );





Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.