#android #realm
#Android #realm
Вопрос:
У меня есть приложение, и когда пользователь нажимает на элемент из listview, информация об этом элементе отображается на другой странице, пользователь может нажать кнопку редактирования или удаления, чтобы удалить этот элемент из списка.
Проблема в том, что код удаления не работает. Страница сведений просто закрывается и возвращается на страницу списка без удаления или изменения чего-либо.
Попытка
страница списка
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent in=new Intent(showAll.this,editCar.class);
in.putExtra("car_id",position);
startActivity(in);
}
});
подробная страница
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_car);
Button btnDelete=(Button) findViewById(R.id.button4);
Button btnEdit=(Button)findViewById(R.id.edut);
final EditText comName=(EditText)findViewById(R.id.edit_comp);
final EditText model=(EditText)findViewById(R.id.edit_model);
final CheckBox status=(CheckBox)findViewById(R.id.checkbox);
final int i=getIntent().getIntExtra("car_id",0);
Realm.init(getApplicationContext());
final Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
final RealmResults<Car> cars =realm.where(Car.class).findAll();
realm.commitTransaction();
final Car car3=cars.get(i);
realm.close();
comName.setText(car3.getName());
model.setText(car3.getModel());
status.setChecked(car3.isStatus());
final Context context=this;
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(editCar.this).setTitle("warning").setMessage("are you sure you want to delete this car ?")
.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Realm.init(getApplicationContext());
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
car3.deleteFromRealm();
realm.commitTransaction();
realm.close();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() { //if user choose no do nothing
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context,"no",Toast.LENGTH_SHORT).show();
}
}).show(); //show dialog
Комментарии:
1. Просто чтобы проверить, вы уверены, что объект не удаляется — это не значит, что вы возвращаетесь к предыдущему представлению, которое не обновляется (просто проверка)? Не могли бы вы указать определение типа автомобиля, пожалуйста.
2.
Realm.init(getApplicationContext());
перезаписывает вашу конфигурацию по умолчанию. Скорее всего, вы записываете в другой файл, чем ожидалось. Вы должны вызывать толькоRealm.init()
класс Application, а затем установить свою собственную RealmConfiguration в качестве конфигурации по умолчанию.
Ответ №1:
Добавьте эту функциональность при нажатии кнопки удаления. Это работает для меня. 🙂
Вот Notifications
мой класс модели.
Realm realm = Realm.getDefaultInstance();
final Notifications deletedItem = yourArrayList.get(indexPosition);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
RealmResults<Notifications> **rows** = realm.where(Notifications.class).equalTo("columnKeyName", columnKeyValue).findAll();
**rows**.deleteAllFromRealm();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
final int deletedIndex = indexPosition;
// remove the item from recycler view and notify adapter
yourArrayList.remove(deletedIndex);
adapter.notifyDataSetChanged();
Надеюсь, это также будет полезно для вас. 🙂
Комментарии:
1. Это не должно работать. Транзакция закрывается к тому времени, когда циклический цикл выполняет запись в этом runnable.
2. @EpicPandaForce откуда у вас проблема? Это отлично работает для удаления отдельного объекта из списка.
3. Возможно
runOnUiThread
, определяет, находитесь ли вы уже в потоке пользовательского интерфейса, и не отправляет сообщение в обработчик.