Android系统。在GridView中显示大字符串ArrayList

时间:2015-07-07 20:44:36

标签: java android gridview arraylist

在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;
}

任何想法发生了什么以及如何阻止它?

1 个答案:

答案 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()