大佬教程收集整理的这篇文章主要介绍了Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我遵循了之前的stackoverflow线程的指示,如下所示:Android Listview with spinner and a checkbox关于如何使用像Spinners这样的可聚焦对象填充ListViews.
我的问题是每次我在ListView中动态添加一个新的ListView条目时,前一个ListView条目的Spinner值都会丢失(实际上Spinner返回其默认设置).为简单起见,我的Spinners填充了以下数据:
String spinner_data[] = {"apple","banana","pear","watermelon","strawBerry"};
例如,如果我选择我的第一个ListView的Spinner值为“pear”,然后我用Button添加一个新的ListView条目,则“pear”条目将从第一个ListView Spinner中消失,并显示默认值“apple”.
任何帮助表示赞赏!
这是我的活动:
@Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.main); lv = (ListView) findViewById(R.id.lv); da = new DataAdapter(this,new ArrayList<RawData>()); lv.setAdapter(da); btn_new = (Button)findViewById(R.id.btn_new); btn_new.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub da.add(new RawData(this)); da.notifyDataSetChanged(); } }); }
RawData类是这样的:
public class RawData { privatE int SELEcted_position; private ArrayAdapter<CharSequence> adapter; public RawData(Context context) { adapter = ArrayAdapter.createFromresource(context,R.array.data,android.R.layout.simple_spinner_item); adapter.setDropDownViewresource(android.R.layout.simple_spinner_dropdown_item); } public ArrayAdapter<CharSequence> getAdapter() { return adapter; } /** * get adapter's item text from SELEcted position * @return */ public String getText() { return (String) adapter.getItem(SELEcted_position); } public int getSELEcted() { return SELEcted_position; } public void setSELEcted(int SELEcted) { this.SELEcted_position = SELEcted; } }
DataArrayAdapter如下:
public class DataArrayAdapter extends ArrayAdapter<RawData> { private Activity myContext; //private final List<RawData> list; public DataArrayAdapter(Activity context,List<RawData> list) { super(context,R.layout.row_view,list); myContext = context; } static class ViewHolder { protected RawData data; protected Spinner spn; protected EditText edt; } @Override public View getView(int position,View convertView,ViewGroup parent) { View view = null; if ( convertView == null ) { LayoutInflater inflator = myContext.getLayoutInflater(); view = inflator.inflate(R.layout.row_view,null); final ViewHolder viewHolder = new ViewHolder(); viewHolder.edt = (EditText)view.findViewById(R.id.edt); viewHolder.data = new RawData(myContext); viewHolder.spn = (Spinner)view.findViewById(R.id.spn); viewHolder.spn.setAdapter(viewHolder.data.getAdapter()); viewHolder.spn.setOnItemSELEctedListener(new OnItemSELEctedListener() { @Override public void onItemSELEcted(AdapterView<?> arg0,View arg1,int arg2_position,long arg3) { // TODO Auto-generated method stub viewHolder.data.setSELEcted(arg2_position); } @Override public void onNothingSELEcted(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); // update the TextView to reflect what's in the Spinner view.setTag(viewHolder); } else { view = convertView; } // This is what gets called every time the ListView refreshes ViewHolder holder = (ViewHolder) view.getTag(); holder.spn.setSELEction(getItem(position).getSELEcted()); return view; } }
要使应用程序正常工作,您必须为所有微调器创建SELEctedItem值数组,并将其作为成员附加到适配器.您必须更新每个OnItemSELEcted事件的相应值,并为每个“添加”按钮单击添加新值.当您在getView中准备视图时,您只需将选定的微调器索引设置为数组中的相应值.
以上是大佬教程为你收集整理的Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值全部内容,希望文章能够帮你解决Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。