在GridView中显示大型ArrayList时遇到问题。
ArrayList由一系列单个字符填充,其中范围由用户输入。
GridView显示ArrayList中的每个值,当按下某个项目时,该字符串将插入到EditText中。
以上所有作品。当我按下EditText时会出现问题。
当ArrayList包含大量条目(> 1000)时,按下EditText并且GridView失去焦点时会有明显的暂停。此暂停会根据ArrayList条目的数量而增加。
ArrayList创建如下:
ArrayList<String> list = new ArrayList<String>();
for (int i = startValue; i <= endValue; i++) {
list.add(new String(Character.toChars(i)));
}
gridView.setAdapter(new CharAdapter(mActivity, list));
适配器如下:
public class CharAdapter extends ArrayAdapter<String> {
public CharAdapter(Context context, ArrayList<String> list) {
super(context, 0, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderItem viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(mActivity).inflate(R.layout.chars_gridview_item, parent, false);
viewHolder = new ViewHolderItem();
viewHolder.charTextView = (TextView) convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolderItem) convertView.getTag();
}
String chr = getItem(position);
viewHolder.charTextView.setText(chr);
return convertView;
}
}
static class ViewHolderItem {
TextView charTextView;
}
任何想法发生了什么以及如何阻止它?
答案 0 :(得分:0)
这是在主线程上发生的繁重操作。在它运行时,它会锁定主线程,从而导致视觉问题。
您需要移动代码:
ArrayList<String> list = new ArrayList<String>();
for (int i = startValue; i <= endValue; i++) {
list.add(new String(Character.toChars(i)));
}
进入一个单独的runnable。
如果这没有太大帮助,请将其设置为AsyncTask实例并将适配器设置为AsyncTask.onPostExecute()