0
我有一個使用自定義適配器的Spinners ListView。當我運行我的代碼時,除非屏幕上顯示的Spinners更多,否則一切正常。如果我向下滾動並顯示最後一個繡球,我可以按照預期使用它們,但只要向上滾動並且它們離開視圖,就會重置到選定項目總是第一個的位置,而不管Spinner中的項目是選擇。 。爲什麼是這樣?我認爲它與getView方法有關,但我不確定如何保存選擇,以便在它再次返回到視圖中時進行選擇。爲什麼我的Spinner在移出視圖時重置?
public class CustomPLNViewAdapter extends BaseAdapter{
private static ArrayList<ArrayList<String>> partLotNumbersArrayList;
private static ArrayList<String> partNames;
private LayoutInflater mInflater;
private Context myContext;
public CustomPLNViewAdapter(Context context, ArrayList<ArrayList<String>> results, ArrayList<String> parts){
partLotNumbersArrayList = results;
partNames = parts;
mInflater = LayoutInflater.from(context);
myContext = context;
}
@Override
public int getCount() {
return partLotNumbersArrayList.size();
}
@Override
public Object getItem(int position) {
return partLotNumbersArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.view_assembly_parts, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.partName);
holder.spinner = (Spinner) convertView.findViewById(R.id.LotNumbers);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(partNames.get(position));
ArrayAdapter<String> adp1=new ArrayAdapter<String>(myContext, android.R.layout.simple_list_item_1, partLotNumbersArrayList.get(position));
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//set the adapter to the spinnner
holder.spinner.setAdapter(adp1);
//if there is only one other part besides "" then set that as default part
if(partLotNumbersArrayList.get(position).size() == 2){
holder.spinner.setSelection(1);
}
holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(holder.spinner.getSelectedItem().toString() == ""){
Log.v("Spinner", "spinner value is blank");
ViewOrderlineAssemblyActivity.assembly.addPart(new Part((String)holder.txtName.getText(), ""));
}else{
ViewOrderlineAssemblyActivity.assembly.addPart(new Part((String)holder.txtName.getText(), holder.spinner.getSelectedItem().toString()));
Log.v("OnItemSelected", (String)holder.txtName.getText() + " : "+ holder.spinner.getSelectedItem().toString());
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
ViewOrderlineAssemblyActivity.assembly.addPart(new Part((String)holder.txtName.getText(), ""));
Log.v("OnNothingSelected", (String)holder.txtName.getText());
}
});
return convertView;
}
static class ViewHolder {
TextView txtName;
Spinner spinner;
}
}