我需要水平地从我的sqlite数据库中显示3个随机图像。由于不可能制作水平ListView
,我通过在水平方向LinearLayout
内将3个ListViews彼此相邻来操纵我的方式。
所以我目前正在使用这种方法:
final ListView g = (ListView)findViewById(R.id.lstText1);
final ListView h = (ListView)findViewById(R.id.lstText2);
final ListView i = (ListView)findViewById(R.id.lstText3);
g.setOnItemClickListener(this);
h.setOnItemClickListener(this);
i.setOnItemClickListener(this);
// Set the adapter to our custom adapter (below)
g.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
Database.Project.NAME), new String[] { BaseColumns._ID,
Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));
h.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
Database.Project.NAME), new String[] { BaseColumns._ID,
Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));
i.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
Database.Project.NAME), new String[] { BaseColumns._ID,
Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));
除了随机显示的图像之间应该是截然不同的,所以一切都按顺序完美运行。使用上面的方法,因为我使用3个不同的ListView,有时它们会显示相同的随机图像。
有人可以帮我解决问题吗?也许通过修改这一行"RANDOM() LIMIT 1"
或者其他,我仍然对任何类型的解决方案持开放态度。
非常感谢!
答案 0 :(得分:4)
我最近一直在使用SQLite为iPhone项目做类似的工作。
看看我提出的以下两个问题,我怀疑他们会回答你想要做的事情。
SQLite select statement optimisation advice
和
答案 1 :(得分:1)
FSM拯救我们......你还在这里
ListView for single item是个坏主意
在布局中放置3个ImagesView并执行类似的操作
final ImageView[] images = new ImageView[3];
ImageLoader loader = new ImageLoader(this);
images[0] = (ImageView)findViewById(R.id.imageView1);
images[1] = (ImageView)findViewById(R.id.imageView2);
images[2] = (ImageView)findViewById(R.id.imageView3);
int counter = 0;
Cursor c = managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
Database.Project.NAME), new String[] { BaseColumns._ID,
Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 3");
if(c!=null && c.moveToFirst()){
do{
String url = c.getString(1);
images[counter].setTag(url);
loader.DisplayImage(url, this, images[counter]);
counter++;
}while(c.moveToNext());
}
答案 2 :(得分:0)
获取rowcount,在客户端选择0到rowcount-1范围内的随机数,然后使用LIMIT选择第n行......