Я пытаюсь обновить RecyclerView
на моем фрагменте, когда пользователь удерживает в itemview
и удаляет объект из базы данных.
Я видел многочисленные ответы и пробовал некоторые реализациииз них безуспешно.Я пробовал notify()
методов.Я не уверен, как подойти к этому больше и не уверен, насколько это возможно, как я пытаюсь сделать.Объект действительно удаляется, и когда фрагмент перезагружается, элемент исчезает.Может ли кто-нибудь помочь, пожалуйста?
Это адаптер:
public void onBindViewHolder(MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {
final OfflineModule model = assList.get(position);
holder.textView_name.setText(model.getCode());
holder.textView_bio.setText(model.getDesc());
holder.txtIDMod.setText(model.getId());
holder.itemView.setOnLongClickListener((View v) ->{
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Delete " + model.getCode() + "?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
RealmHelper helper;
Realm realm;
// initialize realm
Realm.init(mContext);
//SETUP REEALM
RealmConfiguration defaultConfig = new RealmConfiguration.Builder()
.schemaVersion(0)
.build();
realm=Realm.getInstance(defaultConfig);
helper = new RealmHelper(realm);
List<FAssessment> assessmentList =helper.retrieveAF(model.getId());
assert assessmentList != null;
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for(FAssessment a : assessmentList) {
a.deleteFromRealm();
}
}
});
OfflineModule result = realm.where(OfflineModule.class)
.equalTo("code", model.getCode()).findFirst();
assert result != null;
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
result.deleteFromRealm();
}
});
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.create();
builder.show();
return true;
});
}
И активность:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tab_update,
container,
false);
ButterKnife.bind(this, view);
RelativeLayout = contentuserimportMod;
RelativeLayout1 = delResMod;
moduleID = Objects.requireNonNull(getActivity()).getIntent().getStringExtra("id");
moduleCode =Objects.requireNonNull(getActivity()).getIntent().getStringExtra("code");
moduleName =Objects.requireNonNull(getActivity()).getIntent().getStringExtra("desc");
Realm.init(Objects.requireNonNull(getContext()));
RealmConfiguration defaultConfig = new RealmConfiguration.Builder()
.schemaVersion(0)
.build();
realm=Realm.getInstance(defaultConfig);
helper = new RealmHelper(realm);
init();
getAssessList();
return view;
}
private void init(){
linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
AssList.setLayoutManager(linearLayoutManager);
textView1.setText("Assessments - "+moduleName);
List<AssessmentType> list = helper.retrieveAT();
List<String> listString = new ArrayList<>();
for(AssessmentType a : list) {
listString.add(a.getDesc());
}
adapter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), android.R.layout.simple_spinner_dropdown_item, listString);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
spinnerOffline.setAdapter(adapter);
}
private void getAssessList(){
RealmHelper helper=new RealmHelper(realm);
FAssessmentList =helper.retrieveAF(moduleID);
AssessTabUpdateAdapter adapter = new AssessTabUpdateAdapter(getContext(), FAssessmentList);
AssList.setAdapter(adapter);
adapter.notifyDataSetChanged();
AssList.setAdapter(adapter);
}
}
Я хотел быудалить, чтобы показать немедленно, или просто вызвать перезагрузку фрагмента, когда удаление происходит просто так, чтобы удалить удаленный элемент из представления.