欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

Android旋转切换条目,Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值...

发布时间:2025/4/5 Android 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android旋转切换条目,Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我的活动包含一个按钮和一个ListView. ListView包含Spinner和EditText视图.每次我想在Activity的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());

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 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 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 {

private Activity myContext;

//private final List list;

public DataArrayAdapter(Activity context, List 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;

}

}

总结

以上是生活随笔为你收集整理的Android旋转切换条目,Android:当我添加动态新的ListView条目时,ListView中的旋转器会丢失它们的值...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。