#android #sqlite #spinner
Вопрос:
У меня есть действие, в котором есть счетчик, и его адаптер заполняется элементами базы данных. существует каталог добавления предупреждений, который позволяет пользователю добавлять новые элементы в базу данных. проблема в том, что новые элементы не будут отображаться в spinner, если пользователь не вернется к родительскому действию и снова не откроет это действие. есть ли в любом случае возможность загружать элементы spinner в режиме реального времени?
Вот база данных. Я не вдавался в подробности о том, как создается база данных, потому что, очевидно, она в порядке и работает. проблема в другом
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String GROUP_TABLE_NAME = "Groups";
private static final String GROUP_ID = "_id";
private static final String GROUP_TITLE = "group_title";
void addGroup(String title) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(GROUP_TITLE, title);
long result = db.insert(GROUP_TABLE_NAME, null, cv);
if (result == -1) {
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Added successfully!", Toast.LENGTH_SHORT).show();
}
}
Cursor readAllGroups() {
String query = "SELECT * FROM " GROUP_TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if (db != null) {
cursor = db.rawQuery(query, null);
}
return cursor;
}
}
вот деятельность, в которой участвует спиннер. addGroup
является методом onclick для кнопки, которая открывает каталог предупреждений и так далее…
public class GoodsAdd extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.goods_add);
makeSpinner();
}
private void makeSpinner() {
ArrayList<String> groups = new ArrayList<>();
MyDatabaseHelper myDB = new MyDatabaseHelper(GoodsAdd.this);
Cursor cursor = myDB.readAllGroups();
if (cursor.getCount() != 0) {
while (cursor.moveToNext()) {
groups.add(cursor.getString(1));
}
}
Spinner spinner = findViewById(R.id.group_spinner);
spinner.setOnItemSelectedListener(this);
ArrayAdapter ad = new ArrayAdapter(this, R.layout.spinner_item, groups);
ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(ad);
}
public void addGroup(View view) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
final EditText edittext = new EditText(this);
edittext.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
alert.setMessage("new group name:");
alert.setView(edittext);
alert.setPositiveButton("submit", (dialog, whichButton) -> {
MyDatabaseHelper myDB = new MyDatabaseHelper(GoodsAdd.this);
String title = edittext.getText().toString().trim();
myDB.addGroup(title);
Toast.makeText(GoodsAdd.this, title " !!!!!", Toast.LENGTH_SHORT).show();
});
alert.show();
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {}
}
Комментарии:
1. Это потребует значительных изменений в вашем проекте, но взгляните на комбинацию Room amp; LiveData medium.com/mindorks/…
2. Используйте комнату и данные о жизни. Это единственное решение для получения текущих обновлений из базы данных sqlite
3. @SimranSharma Это не единственное решение, но оно самое простое — наверное 🙂