Пользовательский список не обновляется после вставки данных из диалога в SQLi - PullRequest
0 голосов
/ 13 сентября 2018

Я вставляю данные в SQLi из диалогового окна, подобного этому

 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        ContentValues cv = new ContentValues();
                        cv.put(DBHelper.COL_VEHICLE_TYPE, 1);
                        cv.put(DBHelper.COL_OPTION_NAME, "driver");
                        cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());

                        db.insert(DBHelper.TABLE_NAME, null, cv);
                        cursor.requery();
                        adapter.notifyDataSetChanged();

                    }
                });

Я запрашиваю данные в функции onResume (), чтобы отобразить их в виде списка.

public void onResume() {

    super.onResume();

    lst_driver.clear();

    db = dbHelper.getWritableDatabase();
    String[] queryColumns = new String[]{"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE };
    cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
           null,null,null);

    HashMap<String,String> map ;
    String vh_name;

    while(cursor.moveToNext())
    {
        map = new HashMap<String,String>();

        vh_name= dbHelper.VehicleType(cursor.getString(1));
        map.put("vehicle_type", vh_name);
        map.put("date", cursor.getString(3));
        lst_driver.add(map);


    }

    String[] showColumns = new String[]{"vehicle_type", "date"};
    int[] views = new int[] {R.id.ColType, R.id.ColDate};

    adapter = new SimpleAdapter(DriverLicenseActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
    lv_driver.setAdapter(adapter);

    adapter.notifyDataSetChanged();

}

После того, как я вставляю данныеэто не показывать в виде списка.Я должен снова открыть это действие, после чего оно появится в виде списка.Как отобразить данные в виде списка после вставки в SQLi?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы можете создать получение данных в одной функции и просто вызывать его после вставки данных из onClick и onResume()

private void getData() {

  lst_driver.clear();

  db = dbHelper.getWritableDatabase();
  String[] queryColumns = new String[]{"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE };
  cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
       null,null,null);

  HashMap<String,String> map ;
  String vh_name;

  while(cursor.moveToNext())
  {
    map = new HashMap<String,String>();

    vh_name= dbHelper.VehicleType(cursor.getString(1));
    map.put("vehicle_type", vh_name);
    map.put("date", cursor.getString(3));
    lst_driver.add(map);


  }

  String[] showColumns = new String[]{"vehicle_type", "date"};
  int[] views = new int[] {R.id.ColType, R.id.ColDate};

  adapter = new SimpleAdapter(DriverLicenseActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
  lv_driver.setAdapter(adapter);

  adapter.notifyDataSetChanged();
}

Затем позвоните на ваш onResume и после того, как вы вставите данные из onClickListener:

public void onResume() {
  getData();
}

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ContentValues cv = new ContentValues();
                    cv.put(DBHelper.COL_VEHICLE_TYPE, 1);
                    cv.put(DBHelper.COL_OPTION_NAME, "driver");
                    cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());

                    db.insert(DBHelper.TABLE_NAME, null, cv);
                    cursor.requery();
                    getData();

                }
            });
0 голосов
/ 13 сентября 2018

Кажется, ваш метод onResume вызывается перед вставкой SQLite.Я бы порекомендовал вам отделить часть, в которой вы обновляете адаптер, и вызывать этот метод сразу после вставки.

...