0

現在のデータがリストビューの上に表示されるリストビューを実装する必要があります。現在、最近のデータが一番下に表示され、最初のデータがリストビューの一番上に表示されます。私はこれまでのところ自分の作品を添付しています:

SearchActivity.java

public class SearchActivity extends Activity implements OnClickListener,
    OnItemClickListener {

private EditText mHistoryNameEditText;
private Button mInsertButton;
private ListView mHistoryListView;

private ListAdapter mHistoryListAdapter;

private ArrayList<SearchHistoryDetails> searchArrayList;

private ArrayList<SearchHistoryDetails> HistoryObjArrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mHistoryNameEditText = (EditText) findViewById(R.id.editText1);
    mInsertButton = (Button) findViewById(R.id.button1);
    mInsertButton.setOnClickListener(this);

    mHistoryListView = (ListView) findViewById(R.id.names_lsitviews);
    mHistoryListView.setOnItemClickListener(this);

    searchArrayList = new ArrayList<SearchHistoryDetails>();

    mHistoryListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, populateList());

    mHistoryListView.setAdapter(mHistoryListAdapter);

    HistoryObjArrayList = new ArrayList<SearchHistoryDetails>();
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.button1) {
        String providedUgraduateName = mHistoryNameEditText.getText()
                .toString();

        SearchHistoryDetails undergraduateDetailsPojoObj = new SearchHistoryDetails();
        undergraduateDetailsPojoObj.setuGraduateName(providedUgraduateName);

        HistoryObjArrayList.add(undergraduateDetailsPojoObj);

        insertUndergraduate(undergraduateDetailsPojoObj);

        finish();
    }
}

public void insertUndergraduate(
        SearchHistoryDetails paraUndergraduateDetailsPojoObj) {

    AndroidOpenDbHelper androidOpenDbHelperObj = new AndroidOpenDbHelper(
            this);

    SQLiteDatabase sqliteDatabase = androidOpenDbHelperObj
            .getWritableDatabase();

    ContentValues contentValues = new ContentValues();

    contentValues.put(AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME,
            paraUndergraduateDetailsPojoObj.getuGraduateName());
    long affectedColumnId = sqliteDatabase.insert(
            AndroidOpenDbHelper.TABLE_NAME_GPA, null, contentValues);

    sqliteDatabase.close();
    Toast.makeText(this,
            "Values inserted column ID is :" + affectedColumnId,
            Toast.LENGTH_SHORT).show();

}

public List<String> populateList() {

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

    AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(this);

    SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();

    Cursor cursor = sqliteDatabase.query(
            AndroidOpenDbHelper.TABLE_NAME_GPA, null, null, null, null,
            null, null);

    startManagingCursor(cursor);

    while (cursor.moveToNext()) {

        String ugName = cursor
                .getString(cursor
                        .getColumnIndex(AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME));

        SearchHistoryDetails ugPojoClass = new SearchHistoryDetails();
        ugPojoClass.setuGraduateName(ugName);

        searchArrayList.add(ugPojoClass);

        uGraduateNamesList.add(ugName);
    }

    sqliteDatabase.close();

    return uGraduateNamesList;
}

@Override
protected void onResume() {
    super.onResume();
    searchArrayList = new ArrayList<SearchHistoryDetails>();
    mHistoryListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, populateList());
    mHistoryListView.setAdapter(mHistoryListAdapter);
}

@Override
protected void onStart() {
    super.onStart();
    searchArrayList = new ArrayList<SearchHistoryDetails>();
    mHistoryListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, populateList());
    mHistoryListView.setAdapter(mHistoryListAdapter);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

    Toast.makeText(getApplicationContext(), "Clicked on :" + arg2,
            Toast.LENGTH_SHORT).show();

    SearchHistoryDetails clickedObject = searchArrayList.get(arg2);

    Bundle dataBundle = new Bundle();
    dataBundle.putString("clickedUgraduateName",
            clickedObject.getuGraduateName());
}}

このクラスは、データベースからデータを取得し、アクティビティにデータを入力するのに役立ちます。私が作成しているデータベースクラス:

AndroidOpenDbHelper.java

public class AndroidOpenDbHelper extends SQLiteOpenHelper {

public static final String DB_NAME = "allsearch_history_db";
public static final int DB_VERSION = 1;

public static final String TABLE_NAME_GPA = "search_table";
public static final String COLUMN_NAME_UNDERGRADUATE_NAME = "undergraduate_name_column";

public AndroidOpenDbHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String sqlQueryToCreateUndergraduateDetailsTable = "create table if not exists "
            + TABLE_NAME_GPA
            + " ( "
            + BaseColumns._ID
            + " integer primary key autoincrement, "
            + COLUMN_NAME_UNDERGRADUATE_NAME
            + " text not null); ";

    db.execSQL(sqlQueryToCreateUndergraduateDetailsTable);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == 1 && newVersion == 2) {
        // Upgrade the database
    }
}}

これは、データベースとテーブルを作成するためのクラスです。

さて、実際の取引は、データベースからデータを入力しようとすると、最初のデータが上に、最新のデータが下に表示されるということです。元に戻したい。この問題を克服するためにどんな助けもいただければ幸いです。

4

2 に答える 2

2

これを行うには、いくつかの異なる方法があります。ORDER BYクエリの句を使用することをお勧めします。

Cursor cursor = sqliteDatabase.query(
        AndroidOpenDbHelper.TABLE_NAME_GPA, null, null, null, null, null, 
        AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME + " DESC");

また、1つの列からのみ読み取る場合、クエリはその列のみを要求する必要があります。そうしないと、未使用の情報列をクエリするリソースを浪費することになります。

Cursor cursor = sqliteDatabase.query(
        AndroidOpenDbHelper.TABLE_NAME_GPA,
        new String[] {AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME},
        null, null, null, null, 
        AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME + " DESC");

最後に、最小限のコードでクエリをListViewにバインドできるSimpleCursorAdapterの使用を検討することをお勧めします。


さらに 、私はあなたのコードを詳しく調べて、これを試してみました:

Cursor cursor = sqliteDatabase.query(
        AndroidOpenDbHelper.TABLE_NAME_GPA, null, null, null, null, null, 
        BaseColumns._ID + " DESC");
于 2012-09-12T16:33:14.633 に答える
0

データベースからデータを取得し、リストビューに入力するために設定しているアダプタに逆の順序でアイテムを追加することをお勧めします。これを、配列リストを返すデータベースから値を取得できるサンプルと見なしてください次に、この配列リストを検討し、次のように最後から配列アダプターに各項目を追加します。

for(i=arraylist.size()-1;i>0;i--)
{ 
   adapter.add(arraylist.get(i));
}

初めて設定した後、電話をかけることができます

adapter.notifyDataSetChanged() 

リストを自動的に更新します。これを試してみてください

于 2012-09-12T16:27:53.863 に答える