2011-06-10 4 views
0

Мне нужно отобразить 3 случайных изображения из моей базы данных sqlite по горизонтали. Так как невозможно сделать горизонтальный ListView, я манипулировал своим путем, сделав 3 ListViews рядом друг с другом внутри горизонтально ориентированного LinearLayout.Android: unrepeated SQLite Random() Query

Поэтому я использую этот метод в настоящее время:

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 разных ListViews, иногда они показывают одинаковые случайные изображения.

Может ли кто-нибудь дать мне решение моей проблемы? возможно, путем изменения этой строки "RANDOM() LIMIT 1", иначе, я все равно открыт для любых решений.

спасибо!

ответ

1

FSM спасти нас ... ты все еще здесь

ListView для одного элемента является плохой идеей

просто поставить 3 в макете изображений Представления и сделать что-то вроде этого

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()); 
    } 
+0

ты однажды сказал мне, что я лучше использовать ListView -__- в любом случае спасибо, почему ты всегда меня? хе-хе. Я хочу сделать OnClickListener, как объявить длинный идентификатор, OnClick только позволяет мне рассматривать как его аргумент – hectichavana

+0

yeap, но только если вы покажете 3 элемента в одном ListView ... – Selvin

+0

как насчет onClickListener? Как сделать так, чтобы я мог назвать длинный идентификатор? : public void onClick (View v, long id) { \t \t Intent listIntent = новое намерение (это, DetailsActivity.class); \t \t listIntent.setData (Uri.withAppendedPath (Uri.withAppendedPath ( \t \t \t \t Provider.CONTENT_URI, Database.Project.NAME), Лонг \t \t \t \t .ToString (ID))); \t \t startActivity (listIntent); \t \t} – hectichavana

4

Я недавно работал над чем-то похожим для проекта iPhone, также используя SQLite.

Взгляните на следующие два вопроса, которые я задал, я подозреваю, что они отвечают на то, что вы пытаетесь сделать.

SQLite select statement optimisation advice

и

SQLite Select data from multiple rows returned as one row

0

Получить сверку, выбрать случайные числа в диапазоне от 0 до ROWCOUNT-1 на клиенте, а затем использовать LIMIT выбрать п-ю строку ...