我有一个listview,在里面,有几个listitems有微调器(其余的都有复选框)。问题是,每当我拨打spinner.setAdapter(ArrayAdapter);
时,列表视图就会断断续续。如果我在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并将它们粘贴在一个数组中,所以我的代码看起来像这样:
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;
}
我绝对不是listviews的专家,所以我原本以为我可能在getView中做了太多的逻辑。但是,如果我只是注释掉holder.spin.setAdapter(args),那么listview非常流畅,有一堆无用的微调器。我之前在listviews中看过微调器。在滚动时,我该怎么做才能防止口吃?我考虑过使用适配器预设创建每个微调器,但我不知道如何将预先制作的微调器对象绑定到视图ID。
我对此有一些建议。
答案 0 :(得分:0)
经过大量测试后,我发现android设置一个具有一些长项目的适配器要比很多短项目慢得多。我有一个旋转器,编号为-12到36,加载速度比旋转器快3个,共3个项目(不是我的预期)。我最终只是移动到短列表的按钮,每个项目有更多字符。不幸的是,我希望我知道为什么