編輯:關於Android編程
public View getView(int pos, View convertView, ViewGroup parent){ ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text)); holder.icon = (ImageView) convertView.findViewButId(R.id.icon)); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(DATA[pos]); holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2); return convertView; } static class ViewHolder { TextView text; ImageView icon; }
github鏈接:base-adapter-helper
可以看到BaseQuickAdapter繼承自BaseAdapter,同樣我們重點關注它的getView函數。
@Override public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position) == 0) { final H helper = getAdapterHelper(position, convertView, parent); T item = getItem(position); helper.setAssociatedObject(item); convert(helper, item); return helper.getView(); } return createIndeterminateProgressView(convertView, parent); } private View createIndeterminateProgressView(View convertView, ViewGroup parent) { if (convertView == null) { FrameLayout container = new FrameLayout(context); container.setForegroundGravity(Gravity.CENTER); ProgressBar progress = new ProgressBar(context); container.addView(progress); convertView = container; } return convertView; }
第3行代碼就是獲取該postion的Item類型,上面定義了兩種類型的Item,一種是我們需要顯示的View的Item,一種是底部的加載的View的Item。當Item類型為0是就為需要顯示的Item,當Item類型為1是就為底部加載的Item,上面的第11行代碼的createIndeterminateProgressView就是創建底部用來的加載的Item,可以看到它是一個ProgressBar。另外可以通過showIndeterminateProgress(boolean)來顯示或者隱藏這個item。
static BaseAdapterHelper get(Context context, View convertView, ViewGroup parent, int layoutId, int position) { if (convertView == null) { return new BaseAdapterHelper(context, parent, layoutId, position); } // Retrieve the existing helper and update its position BaseAdapterHelper existingHelper = (BaseAdapterHelper) convertView.getTag(); existingHelper.position = position; return existingHelper; }
protected BaseAdapterHelper(Context context, ViewGroup parent, int layoutId, int position) { this.context = context; this.position = position; this.views = new SparseArray在BaseAdapterHelper的構造函數裡面,定義了一個views,它其實就是傳統Adapter裡面的那個ViewHolder用來存放Item裡面的各個view。convertView為我們要顯示的Item的View,接著通過setTag函數將BaseAdapterHelper對象本身關聯到convertView上面,所以我們知道每個Item對象都關聯了一個BaseAdapterHelper對象。(); convertView = LayoutInflater.from(context) // .inflate(layoutId, parent, false); convertView.setTag(this); }
public QuickAdapter(Context context, int layoutResId, List可以看到我們傳入Item布局的layoutResId和要顯示的數據data,data是List類型的。 第6行代碼是將我們向顯示的數據項與BaseAdapterHelper對象關聯起來。data) { super(context, layoutResId, data); }
protected BaseAdapterHelper(Context context, ViewGroup parent, int layoutId, int position) { this.context = context; this.position = position; this.views = new SparseArray(); convertView = LayoutInflater.from(context) // .inflate(layoutId, parent, false); convertView.setTag(this); }
BaseAdapterHelper existingHelper = (BaseAdapterHelper) convertView.getTag(); existingHelper.position = position;他直接得到BaseAdapterHelper對象,然後重新設置它對應的位置postion,因為BaseAdapterHelper對象中引用到了重用的convertView,這樣就可以直接使用這個view的Item了。 下面來舉個簡單的例子:
public class MainActivity extends AppCompatActivity { private ListView listView; private Listdata = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data.add("text1"); data.add("text2"); data.add("text3"); data.add("text4"); data.add("text5"); data.add("text6"); listView = (ListView) findViewById(R.id.listview); QuickAdapter adapter = new QuickAdapter (this, R.layout.item, data) { @Override protected void convert(BaseAdapterHelper helper, String item) { helper.setText(R.id.textView, item); } }; listView.setAdapter(adapter); } }
在上篇文章給大家介紹了仿餓了嗎點餐界面兩個ListView聯動效果主要實現了2個ListView怎樣實現互相關聯,正好上篇博客review了ListView控件常規使用,
1、概述 眾所周知,Activity在不明確指定屏幕方向和configChanges時,當用戶旋轉屏幕會重新啟動。當然了,應對這種情況,Android給
今日事今日畢,這是高效工作的最重原則。沒有什麼能比從待辦事項列表裡劃掉一些條目更讓人覺得舒服的事了。做為一個高效的人,您需要一個優秀的待辦事項管理工具,一個優秀的待辦事項
第二篇:理論通過之前前篇介紹的工具,我們知道了應該怎麼樣去獲取要分析的數據,但是也僅僅局限在於怎麼樣獲取數據,而沒有深入數據分析,這一篇主要講解的是UI刷新這塊部分and