您的位置:首页 > 移动开发 > Android开发

Android菜鸟练习第六课 万能适配器

2016-11-16 08:55 381 查看
第一部分 ViewHolder
public class ViewHolder {private final SparseArray<View> mViews;private int mPosition;private View mConvertView;private ViewHolder(Context context, ViewGroup parent, int layoutId,int position) {this.mPosition = position;this.mViews = new SparseArray<View>();mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);// setTagmConvertView.setTag(this);}/*** 拿到一个ViewHolder对象** @param context* @param convertView* @param parent* @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();}public View getConvertView() {return mConvertView;}/*** 通过控件的Id获取对于的控件,如果没有则加入views** @param viewId* @return*/public <T extends View> T getView(int viewId) {View view = mViews.get(viewId);if (view == null) {view = mConvertView.findViewById(viewId);mViews.put(viewId, view);}return (T) view;}/*** 为TextView设置字符串** @param viewId* @param text* @return*/public ViewHolder setText(int viewId, String text) {TextView view = getView(viewId);if (view4000== null) {Log.e("ViewHolder", "没有找到控件:" + viewId + " - " + text);} else {view.setText(text);}return this;}public ViewHolder setVisibility(int viewId, int visibility) {View view = mViews.get(viewId);if (view == null) {view = mConvertView.findViewById(viewId);}if (view != null) {mViews.put(viewId, view);view.setVisibility(visibility);}return this;}/*** 为ImageView设置图片** @param viewId* @param drawableId* @return*/public ViewHolder setImageResource(int viewId, int drawableId) {ImageView view = getView(viewId);view.setImageResource(drawableId);return this;}/*** 为ImageView设置图片** @param viewId* @param bm* @return*/public ViewHolder setImageBitmap(int viewId, Bitmap bm) {ImageView view = getView(viewId);view.setImageBitmap(bm);return this;}/*** 为ImageView设置图片** @param viewId* @param url* @return*/public ViewHolder setImageByUrl(int viewId, String url) {//ImageLoad.load( (ImageView) getView(viewId),url);return this;}public int getPosition() {return mPosition;}}
第二部分 适配器
public abstract class ListAdapter<T> extends BaseAdapter {protected LayoutInflater inflater;protected Context context;protected List<T> datas;protected final int itemLayoutId;protected boolean busy = false;public ListAdapter(Context context, List<T> datas, int itemLayoutId) {this.context = context;this.inflater = LayoutInflater.from(this.context);this.datas = datas;this.itemLayoutId = itemLayoutId;}public void setBusy(boolean busy) {this.busy = busy;}public boolean isBusy() {return busy;}public List<T> getData() {return this.datas;}@Overridepublic int getCount() {if (this.datas == null) {return 0;}return datas.size();}@Overridepublic T getItem(int position) {if (this.datas == null) {return null;}return datas.get(position);}public void removeData(int position) {if (this.datas == null) {return;} else if (this.datas.size() <= position) {return;}this.datas.remove(position);notifyDataSetChanged();}@Overridepublic long getItemId(int position) {return position;}/*** 清除数据*/public void clearData() {if (this.datas != null) {this.datas.clear();}notifyDataSetChanged();}public void addData(T data) {if (this.datas == null) {this.datas = new ArrayList<T>();}this.datas.add(data);notifyDataSetChanged();}public void addToFirst(T data) {if (this.datas == null) {this.datas = new ArrayList<T>();this.datas.add(data);} else {this.datas.add(0, data);}notifyDataSetChanged();}public void addData(List<T> datas) {if (datas == null) {return;}if (this.datas == null) {this.datas = datas;} else {if (datas.size() > 20) {datas.remove(0);}this.datasf6e7.addAll(datas);}notifyDataSetChanged();}public void setData(List<T> datas) {this.datas = datas;notifyDataSetChanged();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder viewHolder = getViewHolder(position, convertView, parent);try {convert(position, viewHolder, getItem(position));} catch (Exception e) {e.printStackTrace();}return viewHolder.getConvertView();}public abstract void convert(int position, ViewHolder helper, T item);public ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) {return ViewHolder.get(this.context, convertView, parent, this.itemLayoutId, position);}@Overridepublic void unregisterDataSetObserver(DataSetObserver observer) {if (observer != null) {super.unregisterDataSetObserver(observer);}}}
第三部分 JavaBean
public class Bean {public String topString;public String bottomString;public String getBottomString() {return bottomString;}public void setBottomString(String bottomString) {this.bottomString = bottomString;}public String getTopString() {return topString;}public void setTopString(String topString) {this.topString = topString;}}
第四部分 布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"><ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/lv"/></RelativeLayout>
第五部分 item布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv_top"android:textSize="18sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/tv_bottom"android:textSize="28sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
第六部分 Activity
public class MainActivity extends AppCompatActivity {public ListView mListView;public ArrayList<Bean> datas = new ArrayList<Bean>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//填充假数据initData();mListView = (ListView) findViewById(R.id.lv);mListView.setAdapter(new MyAdapter(this,datas,R.layout.item_normal));}public class MyAdapter extends ListAdapter<Bean>{public MyAdapter(Context context, List<Bean> datas, int itemLayoutId) {super(context, datas, itemLayoutId);}@Overridepublic void convert(int position, ViewHolder helper, Bean item) {helper.setText(R.id.tv_top,item.getTopString());helper.setText(R.id.tv_bottom,item.getBottomString());}}public void initData(){Bean bean = new Bean();bean.setTopString("111111");bean.setBottomString("222222222222222");Bean bean1 = new Bean();bean1.setTopString("222222");bean1.setBottomString("333333333333333");Bean bean2 = new Bean();bean2.setTopString("4444444");bean2.setBottomString("555555555555555");Bean bean3 = new Bean();bean3.setTopString("6666666");bean3.setBottomString("777777777777777");Bean bean4 = new Bean();bean4.setTopString("8888888");bean4.setBottomString("999999999999999");Bean bean5 = new Bean();bean5.setTopString("000000");bean5.setBottomString("---------------");datas.add(bean);datas.add(bean1);datas.add(bean2);datas.add(bean3);datas.add(bean4);datas.add(bean5);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息