Ordenación natural de ArrayList

Tengo una aplicación que usa una base de datos sqlite que se coloca en un ArrayList. Estoy tratando de que las entradas se muestren en orden alfabético o por lo que entiendo como "orden natural". Implementé comparable y agregué mi instrucción collections.sort, pero la lista de matrices permanece en orden no alfabético o natural. por favor avise

public class LoginList extends Activity implements OnClickListener, OnItemClickListener {

private ListView loginList;
private Button webLogin;
private ListAdapter loginListAdapter;
private ArrayList<LoginDetails> loginArrayList;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_listview);

    loginList = (ListView)
    findViewById(R.id.loginlist);
    loginList.setOnItemClickListener(this);

    webLogin = (Button)
    findViewById(R.id.button3);
    webLogin.setOnClickListener(this);

    loginArrayList = new ArrayList<xxxxxxxx>();
    loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
    loginList.setAdapter(LAdapter);
    Collections.sort(AList );

    }

@Override
public void onClick (View v) {
    Intent webLoginIntent = new Intent (this, LoginPlusActivity.class);
    startActivity(webLoginIntent);

}

public List<String> populateList (){

    List<String> webNameList = new ArrayList<String>();


    dataStore openHelperClass = new dataStore (this);

    SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase("xxxxxxxx");

    Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, null);

    startManagingCursor(cursor);

    while (cursor.moveToNext()){

    String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE));
    String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS));
    String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME));
    String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD));

    LoginDetails lpDetails = new LoginDetails();

        lpDetails.setsName(sName);
        lpDetails.setwUrl(wUrl);
        lpDetails.setuName(uName);
        lpDetails.setpWord(pWord);

        loginArrayList.add(lpDetails);
        webNameList.add(sName); 
}
sqliteDatabase.close();
return webNameList;
}

@Override
protected void onResume() {
    super.onResume();
loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
loginList.setAdapter(loginListAdapter);
    }

@Override
public void onItemClick(AdapterView<?> arg0 , View arg1, int arg2, long arg3) {
    Toast.makeText(getApplicationContext(), "Selected ID :" + arg2, Toast.LENGTH_SHORT).show();

    Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class);

    LoginDetails clickedObject = loginArrayList.get(arg2);

        Bundle loginBundle = new Bundle();
    loginBundle.putString("clickedWebSite",clickedObject.getsName());
    loginBundle.putString("clickedWebAddress",clickedObject.getwUrl());
    loginBundle.putString("clickedUserName",clickedObject.getuName());
    loginBundle.putString("clickedPassWord",clickedObject.getpWord());  

    updateDeleteLoginInfo.putExtras(loginBundle);   
    startActivity(updateDeleteLoginInfo);
}
    }

SQLite:

 String sqlDataStore = "create table if not exists " + TABLE_NAME_XXXXXXXXX + " ("+ BaseColumns._ID + "integer primary key autoincrement "

                    + COLUMN_NAME_XXXX + " text not null,"
                    + COLUMN_NAME_XXXXXXX + " text not null,"
                    + COLUMN_NAME_XXXXXXXX + " text not null,"
                    + COLUMN_NAME_XXXXXXXX + " text not null);"

preguntado el 27 de julio de 12 a las 15:07

3 Respuestas

Reemplazar esta línea:

  Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, null);

Con este:

  Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, dataStore.COLUMN_NAME_SITE, null);

Para ordenar sus resultados por COLUMN_NAME_SITE.

De esta forma, tu cursor estará preordenado cuando hayas hecho la consulta y no necesites una interfaz comparable.

Respondido 27 Jul 12, 15:07

La respuesta de Davies fue correcta, pero se necesitaba un "null" adicional antes de Colunm_name..." sin el nulo, el "Column_name..." estaría bajo HAVING y no ORDER BY. - Sean

También puede simplemente editar la cláusula WHERE en su consulta sqlite. Querrás agregar algo como esto

ORDER BY TITLE COLLATE NOCASE ASC

Tenga en cuenta que "TÍTULO" es cualquier columna que desee ordenar.

Esto colocará todo en orden ABC ignorando mayúsculas y minúsculas. Resultando en AaBcD en lugar de ABDac

Al usar SQLite, no tendrá que meterse con la comparación en absoluto :)

Respondido 27 Jul 12, 15:07

Cursor cursor = db.rawQuery("select * from TABLENAME_HERE order by COLUMN_NAME_HERE", null);

reemplazar en lugar de

Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, null);

Respondido 27 Jul 12, 15:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.