我有一個listview,裏面有幾個listitems有spinners(其餘都有複選框)。問題是,每次我撥打spinner.setAdapter(ArrayAdapter);
時,列表視圖都會停頓。如果我在getView()中註釋掉該行,則列表視圖可以很好地順利進行,因爲您可以問。使用該行,listview每次遇到新列表時都會出現口吃。Android,爲Spinner設置適配器時出現口吃
我試過一些東西來幫助這個。起初,我認爲這可能是從R.array.somestringarray
拉字符串數組的操作,所以我將這些字符串數組加載到另一個數組中,以便在需要之前將它們存儲在內存中。這沒有用。那麼我認爲這是實際創建適配器,因爲我當時的代碼看起來像
ArrayAdapter<String> spinAdapter = new ArrayAdapter<String>(ScoreCounter.this,android.R.layout.simple_spinner_dropdown_item, forAdapter);
holder.spin.setAdapter(spinAdapter);
所以我創建的所有創建的所有ArrayAdapters事先並堅持他們在一個數組,所以我的代碼看起來像這樣:
holder.spin.setAdapter(masterSpinAdapter[position]);
那還是口吃。看起來設置ArrayAdapter的簡單行爲會導致listview滯後。這裏是我的整個getView():
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView==null){
LayoutInflater inflator = ScoreCounter.this.getLayoutInflater();
convertView = inflator.inflate(R.layout.spinner_item , parent, false);
ViewHolder holder = new ViewHolder();
holder.cbox = (CheckBox)convertView.findViewById(R.id.scoreCheck);
holder.spin = (Spinner)convertView.findViewById(R.id.scoreSpinner);
holder.missionTitle = (TextView)convertView.findViewById(R.id.missionTitle);
holder.missionDescription = (TextView) convertView.findViewById(R.id.missionDescription);
holder.checkListen = new checkListener();
holder.itemListen = new itemListener();
convertView.setTag(holder);
}
ViewHolder holder = (ViewHolder)convertView.getTag();
if(position==1||position==2||position==5||position==6||position==13||position==15){
holder.spin.setVisibility(0x00000004);
holder.spin.setEnabled(false);
holder.cbox.setVisibility(0);
holder.cbox.setEnabled(true);
holder.cbox.setChecked(shouldBeChecked[position]);
holder.checkListen.setRow(position);
holder.cbox.setOnClickListener(holder.checkListen);
}else{
holder.spin.setVisibility(0);
holder.spin.setEnabled(true);
holder.cbox.setVisibility(0x00000004);
holder.cbox.setEnabled(false);
holder.spin.setAdapter((ArrayAdapter)masterSpinAdapter[position]);
holder.itemListen.setRosPos(position);
holder.spin.setOnItemSelectedListener(holder.itemListen);
holder.spin.setSelection(spinnerPosition[position]);
}
holder.missionTitle.setText(missions[position]);
holder.missionDescription.setText(descriptions[position]);
return convertView;
}
我絕對不會在列表視圖的專家,所以我原本以爲我可能已經在getView做得太多邏輯。然而,如果我只是註釋掉holder.spin.setAdapter(args),那麼listview對於一堆無用的spinners來說是非常順利的。我以前在列表視圖中看過紡紗工。我能做些什麼來防止滾動時出現口吃?我想過使用適配器預設預先創建每個微調器,但我不知道如何將預先創建的微調器對象綁定到視圖ID。
我很想聽聽這方面的一些建議。