android ListView使用注意事項

來源:互聯網
上載者:User

標籤:android

總結本人在使用android Listview時遇到的一些應該注意的事項:

1.想要將listview item項裡的子控制項的點擊事件交給item來處理,需要兩步:

(1)重寫子控制項的onTouchEvent方法

@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn false;}

(2)在item的xml檔案中的根布局加上一句:

android:descendantFocusability="blocksDescendants" 
2.listview最佳化策略viewholder,代碼舉例如下:

class MyAdapter extends BaseAdapter{Context mContext;LinearLayout linearLayout = null;LayoutInflater inflater;TextView tex;final int VIEW_TYPE = 2;final int TYPE_1 = 0;final int TYPE_2 = 1;public MyAdapter(Context context) {mContext = context;inflater = LayoutInflater.from(mContext);}@Overridepublic int getCount() {return listString.size();}//每個convert view都會調用此方法,獲得當前所需要的view樣式@Overridepublic int getItemViewType(int position) {int p = position%6;if(p == 0)return TYPE_1;else if(p < 3)return TYPE_2;elsereturn TYPE_1;}@Overridepublic int getViewTypeCount() {return 2;}@Overridepublic Object getItem(int arg0) {return listString.get(arg0);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {viewHolder1 holder1 = null;viewHolder2 holder2 = null;int type = getItemViewType(position);//無convertView,需要new出各個控制項if(convertView == null){//按當前所需的樣式,確定new的布局switch(type){case TYPE_1:convertView = inflater.inflate(R.layout.listitem1, parent, false);holder1 = new viewHolder1();holder1.textView = (TextView)convertView.findViewById(R.id.textview1);holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);convertView.setTag(holder1);break;case TYPE_2:convertView = inflater.inflate(R.layout.listitem2, parent, false);holder2 = new viewHolder2();holder2.textView = (TextView)convertView.findViewById(R.id.textview2);holder2.imageView = (ImageView)convertView.findViewById(R.id.imageview);convertView.setTag(holder2);break;}}else{//有convertView,按樣式,取得不用的布局switch(type){case TYPE_1:holder1 = (viewHolder1) convertView.getTag();break;case TYPE_2:holder2 = (viewHolder2) convertView.getTag();break;}//設定資源switch(type){case TYPE_1:holder1.textView.setText(Integer.toString(position));holder1.checkBox.setChecked(true);break;case TYPE_2:holder2.textView.setText(Integer.toString(position));holder2.imageView.setBackgroundResource(R.drawable.icon);break;}}return convertView;}}//各個布局的控制項資源static class viewHolder1{CheckBox checkBox;TextView textView;}static class viewHolder2{ImageView imageView;TextView textView;} 

3.Listview中子控制項的監聽事件需要在adapter的getview方法中編寫,而盡量不要在activity裡寫。如果在需要在getview中要用到viewholder則viewholder的編寫方式應與原來常見的編寫方式不同。不應出現如下部分內容:

if (view == null) {...} else{holder = (ViewHolder) view.getTag();...}

android ListView使用注意事項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.