我看到了大量的建议,但没有(我发现)考虑了所有因素,因素是:
- 异步下载,没有重复(下载和位图),取消下载/分配不再需要的图像
- 一个适配器可以有多个视图用于相同的ID(对getView(0)的调用非常频繁)
- 无法保证视图不会丢失而不是回收(考虑List/GridView调整大小或按文本过滤)
- 视图和数据/逻辑的分离(尽可能多)
- 不为每次下载启动单独的线程(UI的可见减速).使用队列/堆栈(LinkedBlockingQueue?)和线程池,或某些....但需要结束,如果活动被销毁.
- 清除位图与列表/网格中的当前位置相距足够远,优选仅在需要存储器时
- 在要丢弃的每个Bitmap上调用recycle().
- 外部存储器可能无法使用(无论是在任何时候还是在所有时间),如果使用,应该清除(仅在此处下载的图像).还要考虑Android的Activity destroy/recreation.
- 数据被更改:删除条目(在列表中选择,要删除的按钮,立即刷新)并添加到后台线程(按需刷新列表).已经下载的位图应该保留,只要它们链接的条目仍然存在.
- (可选)不依赖于notifyDataSetChanged(其中,afaik,刷新所有可见的,可能非常复杂的列表项)来更新单个ImageView
- setTextFilterEnabled(true)(如在ArrayAdapter中.它的Filterable实现替换了其他Adapter方法可见的数据数组,因此更改了视图的索引,因此它们不能用作链接到Bitmaps的ID).
- 可用于ExpandableList(影响缩略图的显示顺序)
如果有人回答,请原谅我.我搜索了几个月,但没有找到解决方案.
这些要求对我来说似乎是合理的,但每一个都增加了一个难度维度,特别是Bitmap.recycle,需要在操作和Activity销毁期间调用(注意onDestroy,甚至onStop可能不会被调用).
这也排除了依赖SoftReferences,它可能会处理其他一些问题.
是的,这是必要的,或者即使在任何数量的gc,sleep(20s,偶数),yield和try-catch中的大量数组分配(强制控制的低内存情况)之后我得到OutOfMemoryError.
搜索"OutOfMemoryError:位图大小超过VM预算"或"android位图回收".
是的,我正在重新采样位图.
我想在表中查询字段id,其中一些值如1,5,4,11,它们将根据选择来自前一个屏幕.
cursor = database.query(tablename,
new String[] { "TopName" }, "id =?", new String[]{"2,3"}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到游标计数0,新的String [] {"2"}我得到的值我想要的所有id的字符串数组中的值像OR那样在该列中有值.
我使用简单的游标适配器为微调器设置适配器,因为我使用了sqlite数据库.但我无法自定义微调器的字体颜色,
这是我的微调器的Url有深红色背景我想使用简单的光标适配器与spinner android将文本颜色更改为白色
代码:
Cursor cursor = dbAdapter.getAllData();
if(cursor.getCount()>0){
String[] from = new String[]{"columm_name"};
// create an array of the display item we want to bind our data to
int[] to = new int[]{android.R.id.text1};
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, from, to);
mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerName.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用整数作为主键创建表,但它不起作用.这是错误:
11-02 11:17:24.833:ERROR/AndroidRuntime(4781):引起:android.database.sqlite.SQLiteException:接近"0":语法错误:CREATE TABLE tremp_db(0 INTEGER PRIMARY KEY AUTOINCREMENT,date TEXT,time TEXT ,重复TEXT,gamish TEXT,src_city TEXT,src_area TEXT,dest_city TEXT,dest_area TEXT,price TEXT,TEXT,phone TEXT,email TEXT,text TEXT,update_time TEXT);
有人知道究竟是什么问题?
感谢名单...
这是代码:
public class Data
{
private static String DATABASE_NAME = new String("db_carpool.db");
public static final int DATABASE_VERSION = 7;
public static String TABLE_NAME = new String("tremp_db");
public static int ID;
public static String DATE = new String("date");
private static String TIME = new String("time");
private static String REPEAT = new String("repeat");
private static String GAMISH = …Run Code Online (Sandbox Code Playgroud)