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中的旋转器会丢失它们的值...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无人驾驶板块上市公司一览 都是手里有技术
- 下一篇: html 文件上传与移除,js jque