Activity/Fragment 和 ViewModel 在 Adapter 中的良好实践?

Activity/Fragment and ViewModel in Adapter good practice?

假设我们有 Activity/Fragment,其中包含一个 RecyclerView。此外,它设置了一个适配器。为便于示例,假设 Adapter 必须有权访问 Fragment 才能调用显示 Snackbar 的方法。此外,假设适配器中有几个项目。我想删除一个并将其从数据库中删除。因此我应该调用 ViewModel 的方法。我已经进行了研究,但我找不到任何信息,如果将片段引用到适配器中是好是坏。

你能帮我解释一下吗?同样对于 ViewModel,我发现了一些想法

但是最佳做法是什么?

  1. 好的适配器 类 应该是静态的,以帮助开发人员将其与 Activity/Fragment 部分分开
  2. 不要在适配器中保存 Activity/Fragment 引用
  3. ViewModels 应该属于 Activity 或 Fragments
  4. 适配器应通过 Callbacks/Listeners 或 LiveData
  5. 执行 Activity/Fragment 的操作

Pseudo-code:

public class MainActivity extends Activity {
    
    private interface Listener {
        void OnRemoved(@NonNull xxx removedItem);
    }
    
    private static final class MyAdapter extends ArrayAdapter<xxx> {
        private final Listener mListener;
        private MyAdapter(@NonNull final Listener listener) {
            super(...);
            this.mListener = listener;
        }
        @Override
        public void remove(xxx item) {
            super.remove(xxx); //<-- this removes item from Adapter
            this.mListener.OnRemoved(item); //<-- this triggers Activity's code
        }
    }
    
    public void onCreate(...) {
        ...
        new MyAdapter(new Listener() {
            @Override
            public void OnRemoved(@NonNull final xxx removedItem) {
                Snakbar.makeText(....).show();
            }
        });
    }
}