Обновить фрагмент после изменения в адаптере для RecyclerView - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь обновить 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);
}    

}

Я хотел быудалить, чтобы показать немедленно, или просто вызвать перезагрузку фрагмента, когда удаление происходит просто так, чтобы удалить удаленный элемент из представления.

...