Android,为Spinner设置适配器时口吃
我有一个listview,其中有几个ListItem有微调器(其余都有复选框)。问题是,每次我调用Android,为Spinner设置适配器时口吃,android,android-listview,android-arrayadapter,android-spinner,Android,Android Listview,Android Arrayadapter,Android Spinner,我有一个listview,其中有几个ListItem有微调器(其余都有复选框)。问题是,每次我调用spinner.setAdapter(ArrayAdapter),listview会结巴。如果我在getView()中注释掉这一行,listview工作得非常好,正如您所要求的那样平滑。有了这一行,listview每次点击新列表时都会结巴 我试过一些方法来帮助你。起初,我认为这可能是从R.array.somestringarray中提取字符串数组的操作,因此我将这些字符串数组加载到另一个数组中,以便
spinner.setAdapter(ArrayAdapter)代码>,listview会结巴。如果我在getView()中注释掉这一行,listview工作得非常好,正如您所要求的那样平滑。有了这一行,listview每次点击新列表时都会结巴
我试过一些方法来帮助你。起初,我认为这可能是从R.array.somestringarray
中提取字符串数组的操作,因此我将这些字符串数组加载到另一个数组中,以便在需要它们之前就已经在内存中了。那没用。然后我假设这是适配器的实际创建,因为我当时的代码看起来像
ArrayAdapter<String> spinAdapter = new ArrayAdapter<String>(ScoreCounter.this,android.R.layout.simple_spinner_dropdown_item, forAdapter);
holder.spin.setAdapter(spinAdapter);
那还是口吃。似乎设置ArrayAdapter的简单操作会导致listview延迟。这是我的整个getView()
我绝对不是ListView方面的专家,所以我最初认为我可能在getView中做了太多的逻辑工作。但是,如果我简单地注释掉holder.spin.setAdapter(args),listview会非常平滑,有很多无用的微调器。我以前在ListView中见过微调器。如何防止滚动时出现口吃?我考虑过使用适配器预设预先创建每个微调器,但我不知道如何将预先制作的微调器对象绑定到视图ID
我很想得到一些建议。经过大量测试后,我发现安卓设置一个有几个长项目的适配器要比设置很多短项目的适配器慢得多。我有一个数字为12到36的微调器,它的加载速度比3个项目中总共30个字符的微调器快得多(这不是我所期望的)。最后,我只移动到每个项目包含更多字符的短列表的按钮。不幸的是,我希望我知道为什么
holder.spin.setAdapter(masterSpinAdapter[position]);
@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;
}