Java 如何防止RecyclerView在从新活动(MVVM)移回后重新添加项目导致同一列表加倍

Java 如何防止RecyclerView在从新活动(MVVM)移回后重新添加项目导致同一列表加倍,java,android,mvvm,android-recyclerview,Java,Android,Mvvm,Android Recyclerview,我正在从youtube视频中学习MVVM模式下的RecyclerView。我创建了一个recycler视图来加载非常简单的项目。它工作正常,但当我导航到一个新活动,然后使用“回收器”视图返回该活动时。列表中的“我的项目”重复。例如,“我的回收器”视图显示了两个项目,如Item1和Item2。在我移动到一个新的活动并返回后,列表变成Item1、Item2、Item1和Item2。因此,每次我开始新的活动并返回时,它都会不断翻倍。我只希望回收者查看加载一次,如何解决此问题?多谢各位 我的回购协议:

我正在从youtube视频中学习MVVM模式下的RecyclerView。我创建了一个recycler视图来加载非常简单的项目。它工作正常,但当我导航到一个新活动,然后使用“回收器”视图返回该活动时。列表中的“我的项目”重复。例如,“我的回收器”视图显示了两个项目,如Item1和Item2。在我移动到一个新的活动并返回后,列表变成Item1、Item2、Item1和Item2。因此,每次我开始新的活动并返回时,它都会不断翻倍。我只希望回收者查看加载一次,如何解决此问题?多谢各位

我的回购协议:

public class DWCategoryRepository {

    private static DWCategoryRepository instance;
    private ArrayList<DWCategories> dataSet = new ArrayList<>();

    public static DWCategoryRepository getInstance() {
        if (instance == null){
            instance = new DWCategoryRepository();
        }

        return instance;
    }

    public MutableLiveData<List<DWCategories>> getDWCategories(){
        setDWCategories();
        MutableLiveData<List<DWCategories>> data = new MutableLiveData<>();
        data.setValue(dataSet);

        return data;
    }

    private void setDWCategories() {
        dataSet.add(new DWCategories("Item1"));
        dataSet.add(new DWCategories("Item2"));

    }

}
公共类DWCategoryRepository{
私有静态DWCategoryRepository实例;
私有ArrayList数据集=新ArrayList();
公共静态DWCategoryRepository getInstance(){
if(实例==null){
instance=new-DWCategoryRepository();
}
返回实例;
}
公共可变LiveData getDWCategories(){
setDWCategories();
MutableLiveData=新的MutableLiveData();
data.setValue(数据集);
返回数据;
}
私有void setDWCategories(){
添加(新的DWCategories(“Item1”);
添加(新的DWCategories(“Item2”));
}
}
我的ViewModel:

public class MainWalletViewModel extends ViewModel {

    private MutableLiveData<List<DWCategories>> mCategories;
    private DWCategoryRepository mRepo;

    public void init(){
        if (mCategories != null) {
            return;
        }

        mRepo = DWCategoryRepository.getInstance();
        mCategories = mRepo.getDWCategories();
    }

    public LiveData<List<DWCategories>> getDWCategories(){
        return mCategories;
    }

}
public类MainWalletViewModel扩展了ViewModel{
私有可变LiveData McCategories;
私人DWCategoryRepository mRepo;
公共void init(){
如果(McCategories!=null){
返回;
}
mRepo=DWCategoryRepository.getInstance();
mCategories=mRepo.getDWCategories();
}
公共LiveData getDWCategories(){
返回McCategories;
}
}
视图:

public类MainWalletActivity扩展了DWBaseActivity实现WalletCategoryAdapter.OnCategoryListener{
私人WalletCategoryAdapter mWalletCategoryAdapter;
私有主WalletViewModel mMainWalletViewModel;
私人回收视图mRecyclerView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
初始化为tabbinding();
}
private void initializeDataBinding(){
MainWalletActivityBinding-dataBinding=DataBindingUtil.setContentView(此为R.layout.main\u钱包\u活动);
设置支持操作栏(dataBinding.walletToolbar);
//启用工具栏上的“后退”按钮
showbackarrowntoolbar();
//从视图模型获取类别
initCategories();
//设置适配器
mWalletCategoryAdapter=新WalletCategoryAdapter(this,mMainWalletViewModel.getDWCategories().getValue(),this);
//将适配器设置为回收器视图
mRecyclerView=dataBinding.walletCategoryRV;
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mrecycerview.setAdapter(mWalletCategoryAdapter);
//将分隔器添加到回收器视图
mRecyclerView.附加装饰(新分区装饰)(主墙活动。此,
DividerItemDecoration.VERTICAL);
}
私有void initCategories(){
mMainWalletViewModel=ViewModelProviders.of(this.get)(MainWalletViewModel.class);
mMainWalletViewModel.init();
mMainWalletViewModel.getDWCategories().observe(这是一个新的观察者(){
@凌驾
公共void onChanged(@Nullable List dwCategories){
mWalletCategoryAdapter.notifyDataSetChanged();
}
});
}
}

您正在getter中调用
setDWCategories

 public MutableLiveData<List<DWCategories>> getDWCategories(){
    setDWCategories(); // <- Remove this line!
    MutableLiveData<List<DWCategories>> data = new MutableLiveData<>();
    data.setValue(dataSet);

    return data;
}
public MutableLiveData getDWCategories(){
setDWCategories()//
 public MutableLiveData<List<DWCategories>> getDWCategories(){
    setDWCategories(); // <- Remove this line!
    MutableLiveData<List<DWCategories>> data = new MutableLiveData<>();
    data.setValue(dataSet);

    return data;
}