我正在尝试显示一个带有文本的网格视图,基本上一年中的每一天都会显示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;
}有没有更好的方法来做到这一点,比如释放目前没有显示在屏幕上的视图?
发布于 2012-11-25 22:11:55
您应该重用视图。现在,每次getView调用时都会创建新的TextView实例。但你被赋予了convertView。Android为你缓存所有的视图并重用它们,所以它使用大约10-20个(屏幕上可见的数量)视图并重用它们,而不是每行有1000个视图。您应该首先检查convertView是否不为空,然后将其转换为TextView并填充您的文本,否则您需要像现在一样手动创建TextView并返回它。查看此教程:http://www.vogella.com/articles/AndroidListView/article.html 5.2 ConvertView。
发布于 2012-11-25 22:17:23
它正在创建新的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;
}https://stackoverflow.com/questions/13551740
复制相似问题