举例说明ArrayAdapter的使用和如何设置ListView中每个Item的点击事件
2016-10-19 10:35
501 查看
首先要先定义一个ListView对象,并进行实例化
定义类MyAdapter继承ArrayAdapter
定义MyAdapter对象并实例化,同时给定义的ListView对象设置适配器,这样视图中的控件ListView就和数组适配器联系在一起了
给ListView中的每一个Item设置点击事件的处理逻辑
private ListView mListView; mListView=(ListView)findViewById(R.id.ListView);
定义类MyAdapter继承ArrayAdapter
public class MyAdapter extends ArrayAdapter<String>{ int [] indexs=null;//索引整型数组 String[] labels=null;//标签字符串数组 int[] results=null;//结果整型数组 public MyAdapter(Context context,int resId,int txtResId,String[] arr,String[] ixs){ //构造函数就是进行一些初始化工作 //MyAdapter的构造函数传入的参数有很多种可能 //resId是name的资源id,txtResId是index的资源id,arr是保存name的字符串数组,ixs是保存index的字符串数组 super(context,resId,txtResId,arr);//父类(超类)中没有第五个参数 labels=arr; int len=labels.length;//取标签字符串数组的长度 results=new int[len]; indexs=new int[len];//给结果数组和索引数组进行实例化,长度都设置为标签数组的长度 for(int i=0;i<len;i++){//对结果数组和索引数组中的数据进行初始化 results[i]=0; indexs[i]=EMODE_ARRAY.valueOf(ixs[i]).ordinal();//这里求名称为ixs[i]的枚举类型的序数 //EMODE_ARRAY是一个枚举类型,定义在类的前面 } } public View getView(int pos,View v,ViewGroup parent){//这是继承ArrayAdapter<String>需要重写的方法,是对ListView中的每一个Item进行操作的方法 if(v==null){ v=inflater.inflate(R.layout.em_menu_item, null);//em_menu_item是菜单中每个单项的显示视图,里面包括一个TextView和一个ImageView } ((TextView)v.findViewById(R.id.txt)).setText(labels[pos]);//TextView保存的是相应位置上的name,pos是每个item的索引(序数) ImageView img=(ImageView)v.findViewById(R.id.img);//ImageView保存的是测试的结果位图 if(results[pos]==1){//result数组值的改变应该是在每个测试项中进行的 img.setImageBitmap(okBm); }else if(results[pos]==2){ img.setImageBitmap(failBm); }else{ img.setImageBitmap(null); } return v; } public void onResume(){//每次单项测试完成后回到菜单列表界面的时候都会调用该方法 ContentResolver cr=getContentResolver(); String org_results=Settings.System.getString(cr,MatchingReceiver.IS_Telephone?"emode_pcba_results":"emode_results"); //这里针对Settings导入的包是android.provider.Settings,emode_pcba_result和emode_results应该是这里面的内容 //应该是每个单项测试完成后都会把数据保存在上面提到的内容中 rg_results!=null){//测试结果不为空 String[] pairs=org_results.split(",");//将保存的字符串根据,分割形成一个字符串数组 String[] tp; int len=results.length;//len表示测试结果的长度 int s=pairs.length;//s表示测试结果中根据,分割后的数组长度 for(int i=0;i<len;i++){ for(int j=0;j<s;j++){ tp=pairs[j].split("=");//把根据,分割的字符串数组再根据=分割形成字符串数组 if(indexs[i]==Integer.parseInt(tp[0])){//如果每一项结果的索引值和保存的结果相同 results[i]=Integer.parseInt(tp[1]);//就给该项的结果赋值,同时将字符串形式的值转换为整型 } } } notifyDataSetChanged();//通知数据发生了变化 //void android.widget.ArrayAdapter.notifyDataSetChanged()该方法是ArrayAdapter自带,用来更新改变的数据 } } }
定义MyAdapter对象并实例化,同时给定义的ListView对象设置适配器,这样视图中的控件ListView就和数组适配器联系在一起了
MyAdapter adapter=new MyAdapter(this,R.layout.em_menu_item,R.id.txt,array_all,Index_all); //第一个参数是当前的上下文,第二个是ListView中每个单项的布局文件的id,第三个是单项的文本id,第四个是all_name字符串数组,第四个是all_index字符串数组 mListViw.setAdapter(adapter);//mlistview是ListView对象,这里通过setAdapter方法给它设置相应的适配器
给ListView中的每一个Item设置点击事件的处理逻辑
mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3){ //arg0表示点击发生的所在的AdapterView,arg1是在AdapterView中被点击的view,arg2表示adapter中view的位置(position),arg3表示被点击的item的行id Intent intent=new Intent("android.intent.action.emode_menu"); intent.putExtra("com.example.Index_board", Index_board[arg2]); sendBroadcast(intent); } });
相关文章推荐
- android中通过网络请求数据显示在Listview中,面对许多的item,如何给每个item设置点击事件以跳转到不同的activity
- 如何在ListView中设置item的点击事件
- ListView的Item里的TextView设置ClickableSpan和LinkMovementMethod导致ListView无法响应点击事件
- android捕获ListView中每个item点击事件
- android中如何去掉pulltorefreshlistview点击item时的背景颜色,与item外边距设置
- android捕获ListView中每个item点击事件
- android捕获ListView中每个item点击事件
- Listview点击事件失效问题解决以及每个Item 子控件获取focus
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- AlertDialog中使用自定义View,view中的Button如何设置点击事件监听
- 如何设置listview 某个item不可点击,即没有背景变色的效果
- ListView的Item中设置Button点击事件优化,避免重复new Listener
- 关于listview的item的点击事件的各个参数使用
- listview为不同的item设置不同的点击事件
- android捕获ListView中每个item点击事件
- android捕获ListView中每个item点击事件
- 解决Listview中Item中控件设置点击事件而Item点击事件失效问题
- android捕获ListView中每个item点击事件
- android捕获ListView中每个item点击事件
- android捕获ListView中每个item点击事件