Android ListView中加入Spinner的一些问题

前段时间入手了一台Android系统的G2,入手的原因很简单了,想研究Android方面的应用开发。断断续续的看了一些资料,了解了一些基本的知识,这几天就准备做一个将Excel表格的通讯录导入到手机里。做了有几天了,前面断断续续的有一些小问题,都是些初学者常有的,今天做了一个ListView中加入Spinner,花了很多时间.

第一次,SimpleAdapter,通过新建一个spinner,然后用adapter加到列表中,当然是失败,报错是SimpleAdapter不能绑定spinner这个view。以后想想也是,每一个spinner是通过我们指定的layout.xml产生的,新建一个spinner不可能通过adapter绑定到列表中。

后来,看了一些例子,才知道,很多情况下,还是要自定义adapter。于是依样画葫芦,自定义了一个adapter。最终代码如下:

package com.me; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Spinner; import android.widget.TextView; public class HasSpinnerListAdapter extends BaseAdapter { private LayoutInflater mInflater; private String[] col; private String[] spinnerItem; private int resource; private int[] to; public HasSpinnerListAdapter(Context context, String[] col, String[] spinnerItem, int resource, int[] to) { mInflater = LayoutInflater.from(context); this.col = col; this.spinnerItem = spinnerItem; this.resource = resource; this.to = to; } @Override public int getCount() { // TODO Auto-generated method stub return col.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return col[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView text = null; Spinner spinner = null; if (convertView == null) { convertView = mInflater.inflate(resource, null); } text = (TextView) convertView.findViewById(to[0]); spinner = (Spinner) convertView.findViewById(to[1]); /* * holder = new ViewHolder(); holder.text = (TextView) * convertView.findViewById(to[0]); holder.spinner = (Spinner) * convertView .findViewById(to[1]); convertView.setTag(holder); */ text.setText((CharSequence) col[position]); // 由于每次显示都会调用getView,因此,如果重新设置适配器,会将之前的选择冲掉 if (spinner.getCount() == 0) { ArrayAdapter spinnerAdapter = new ArrayAdapter( convertView.getContext(), android.R.layout.simple_spinner_item, spinnerItem); spinnerAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(spinnerAdapter); } Log.e("position", String.valueOf(position)); Log.e("spinner", spinner.toString()); return convertView; } }

 

构造函数,传入了布局的相关资源,同时传入了显示文本的数组,和spinner里的选项数组,ListView的显示结果样子如下:

 

姓名 spinner1

电话 spinner2

....

当然,每一个spinner都有相同的选项,但是,我所希望的是,姓名,对应spinner1中的某一个选项,电话 对应spinner2中的某一个选项

可是运行的结果却有点乱,如果ListView在一屏内显示完,那倒没问题,但是,如果要多屏,在滚屏之后,spinner的选项会完全乱掉,也找不到什么规律。

于是用Log.e打印出相应的position和spinner(红色显眼),发现position和spinner之间没有对应关系。

 

解决的方法就是,在spinner选择之后,应当将选项记录下来,在getView中,把为spinner指定一个选项。

 

开始按这个思路做。

你可能感兴趣的:(Android)