0

我正在尝试显示一个带有文本的网格视图,基本上它将显示一年中的每一天的 7-8 个值。所以是的,它很快就会变得很大。

当我尝试向下滚动并且我在中间时,它会耗尽内存。这就是我正在尝试的方法

public View getView(int position, View convertView, ViewGroup parent) {
        dateView = new TextView(mContext);
        dateView.setText(dateArray.get(position));
        dateView.setSingleLine(true);
        // dateview.setLayoutParams(new GridView.LayoutParams(70, 70));
        Log.d("--in get view--", "");
                return dateView;
}

有没有更好的方法来做到这一点,比如可能释放目前没有在屏幕上显示的视图?

4

2 回答 2

3

您应该重用视图。现在您创建TextView每次getView调用的新实例。但是给了你convertView。Android 会为您缓存所有视图并重用它们,因此它不是每行有 1000 个视图,而是使用大约 10-20 个(屏幕上可见的)视图并重用它们。您应该首先检查 if convertViewis not null 然后将其转换为TextView并填充您的文本,否则您需要TextView像现在一样手动创建并返回它。查看本教程:http : //www.vogella.com/articles/AndroidListView/article.html 5.2 ConvertView。

于 2012-11-25T14:11:55.110 回答
1

它正在为每行显示创建新的 dateView,(向上或向下移动)。使用布局膨胀。要使用它创建适配器布局,请在 getview 中捕获它。

public static class ViewHolder {
        public TextView textView;       
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        ViewHolder holder;
        try {

            if (convertView == null) {
                vi = inflater.inflate(R.layout.yourTextviewInIt, null);
                holder = new ViewHolder();
                holder.textView = (TextView) vi.findViewById(R.id.textView);                
                vi.setTag(holder);
            } else {
                holder = (ViewHolder) vi.getTag();
            }

            holder.textView.setText(dateArray.get(position));
            holder.textView.setSingleLine(true);

        } catch (Exception e) {

        }
        return vi;
    }
于 2012-11-25T14:17:23.323 回答