亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1062 | 回復(fù): 0
打印 上一主題 下一主題

Android 帶選擇框的listviw--改進(jìn)版 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-20 09:44 |只看該作者 |倒序?yàn)g覽
 

    在上一篇文章中實(shí)現(xiàn)了一個帶選擇框的listview。但是那個例子有個.很嚴(yán)重的問題:必須點(diǎn)擊選擇框才能選擇該列,這在模擬器上沒有什么大問題,可是在手機(jī)上時問題就來了。手機(jī)的屏幕一般很小,那個選擇框也會變得很小,如果有些人的指頭又粗的話,點(diǎn)擊選擇框是件很不爽的問題。一般的listview都要支持對整個列的點(diǎn)擊響應(yīng),在本例中就實(shí)現(xiàn)來這個功能。 

    這個例子是基于上個例子來實(shí)現(xiàn)的,只是做了一些修改,下面只對修改的地方做出說明。修改主要體現(xiàn)在showlist1.java上。這里用到了ListView.CHOICE_MODE_MULTIPLE,在androidAPIDEMO中實(shí)現(xiàn)帶選擇框的listview時就使用來該參數(shù),設(shè)置來該參數(shù)后,每次點(diǎn)擊listview都會n(n是要顯示的條目數(shù))次調(diào)用重寫的getview方法來更新各個條目的選擇狀態(tài)。在對Listitem的點(diǎn)擊事件中,更新記錄條目選擇狀態(tài)的ArrayList<Boolean> CheckItemm,這也是getview方法用來更新顯示狀態(tài)的依據(jù)。另外本例中去掉來上次中所用到的checkbox,而使用了CheckedTextView來代替,使實(shí)現(xiàn)起來能夠更加容易。值得一提的是,通過重寫getview方法,我們可以得到任何想要的view,也就是說,在listview每一行都是一個view,該view即為getview方法的返回值。



  1. package com.test;

  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.widget.AdapterView;
  13. import android.widget.AdapterView.OnItemClickListener;
  14. import android.widget.BaseAdapter;
  15. import android.widget.Button;
  16. import android.widget.CheckedTextView;
  17. import android.widget.ImageView;
  18. import android.widget.ListView;
  19. import android.widget.Toast;

  20. import java.util.ArrayList;


  21. public class ShowList1 extends Activity implements OnClickListener {
  22.     private String TAG="showlist1";
  23.     ListView list;
  24.     Button button;
  25.     ArrayList<String> array;
  26.     ArrayList<Boolean> checkedItem=new ArrayList<Boolean>();
  27.     private Bitmap mIcon1;
  28.     CheckAdapter chadapter;

  29.     public void onCreate(Bundle savedInstanceState) {
  30.         super.onCreate(savedInstanceState);
  31.         mIcon1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon48x48_1);
  32.         setContentView(R.layout.list1);
  33.         list=(ListView)findViewById(R.id.listView);
  34.         button=(Button)findViewById(R.id.result);
  35.         button.setOnClickListener(this);
  36.         //get music names from other activity
  37.         array=getIntent().getStringArrayListExtra("list");
  38.         //init the check box status to unchecked
  39.         for(int i=0;i<array.size();i++){
  40.             checkedItem.add(i,false);
  41.         }
  42.         Log.d(TAG,array.toString());
  43.        chadapter=new CheckAdapter(this);
  44.        list.setAdapter(chadapter);
  45.        list.setItemsCanFocus(false);
  46.        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  47.        list.setOnItemClickListener(new OnItemClickListener(){
  48.             public void onItemClick(AdapterView<?> parent, Viewview, int position, long id) {
  49.                 //update the value of checked items
  50.                 if(checkedItem.get(position)==true){
  51.                     checkedItem.set(position,false);
  52.                     Log.d(TAG,"true");
  53.                 }
  54.                 else{
  55.                     checkedItem.set(position,true);
  56.                     Log.d(TAG,"false");
  57.                 }
  58.             }
  59.         });
  60.     }

  61.     /*
  62.      * (non-Javadoc)
  63.      * @see android.view.View.OnClickListener#onClick(android.view.View)
  64.      * see which has been choosed
  65.      */
  66.     @Override
  67.     public void onClick(View v) {
  68.         String s="You have choosed ";
  69.         for(int i=0;i<array.size();i++){
  70.             if(checkedItem.get(i)){
  71.                 s=s+","+array.get(i);
  72.             }
  73.         }
  74.         Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
  75.     }

  76.     class CheckAdapter extends BaseAdapter {
  77.         private LayoutInflater mInflater;
  78.         public CheckAdapter(Context context){
  79.             this.mInflater=LayoutInflater.from(context);
  80.         }

  81.         public int getCount() {
  82.             return array.size();
  83.         }
  84.         public Object getItem(int position) {
  85.             return position;
  86.         }
  87.         public long getItemId(int position) {
  88.             return position;
  89.         }
  90.         public View getView(int position, View convertView, ViewGroup parent) {
  91.             Log.d(TAG,"getview");
  92.             ImageView img;
  93.             CheckedTextView name;
  94.             View view;
  95.             final int p=position;
  96.             if(convertView==null){
  97.                 view=mInflater.inflate(R.layout.api,parent,false);
  98.             }
  99.             else{
  100.                 view=convertView;
  101.             }
  102.             img=(ImageView)view.findViewById(R.id.img);
  103.             name=(CheckedTextView)view.findViewById(R.id.text);
  104.             img.setImageBitmap(mIcon1);
  105.             final String s=(String)array.get(position);
  106.             name.setText(s);
  107.             //display which item has been checked
  108.             if(checkedItem.get(p)==true)
  109.                 name.setChecked(true);
  110.             else
  111.                 name.setChecked(false);
  112.             return view;
  113.         }
  114.     }
  115. }

     最后修改的地方是布局文件,該文件命名為api.xml。在其中主有有兩部分,分別是ImageView和CheckedTextView,實(shí)現(xiàn)的界面同上例中的界面是相同的,圖片就不再貼出了。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3.   xmlns:android="http://schemas.android.com/apk/res/android"
  4.   android:orientation="horizontal"
  5.   android:layout_width="wrap_content"
  6.   android:layout_height="wrap_content">
  7.  <ImageView
  8.     android:id="@+id/img"
  9.     android:layout_width="48dip"
  10.     android:layout_height="48dip" 
  11.     android:layout_marginTop="7.0dip"
  12.     android:layout_marginLeft="5.0dip"
  13.     android:layout_marginRight="5.0dip" 
  14.   />
  15. <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
  16.     android:id="@+id/text"
  17.     android:layout_width="fill_parent"
  18.     android:layout_height="?android:attr/listPreferredItemHeight"
  19.     android:textAppearance="?android:attr/textAppearanceLarge"
  20.     android:gravity="center_vertical"
  21.     android:checkMark="?android:attr/listChoiceIndicatorMultiple"
  22.     android:paddingLeft="6dip"
  23.     android:paddingRight="6dip"
  24.     android:layout_toRightOf="@id/img"
  25. />
  26. </RelativeLayout>






您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP