繁体   English   中英

如何在扩展RecyclerView.Adapter的类中重新绑定视图

[英]How to rebind view in a class that extends RecyclerView.Adapter

我想在closeDialog()时重新绑定视图。 我认为我应该以某种方式将视图标记为肮脏。 如果这是采取的正确措施,我将如何做? 我的代码:

 public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder> implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener { private SettingsFragmentView mView; private Context mContext; private ArrayList<SettingsItem> mSettings; private SettingsItem mClickedItem; private int mSeekbarProgress; private AlertDialog mDialog; private TextView mTextSliderValue; public SettingsAdapter(SettingsFragmentView view, Context context) { mView = view; mContext = context; } // Unrelated code removed here @Override public void onClick(DialogInterface dialog, int which) { if (mClickedItem instanceof SingleChoiceSetting) { SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem; int value = getValueForSingleChoiceSelection(scSetting, which); MenuTag menuTag = scSetting.getMenuTag(); if(menuTag != null) { if (menuTag.isGCPadMenu()) { mView.onGcPadSettingChanged(menuTag, value); } if (menuTag.isWiimoteMenu()) { mView.onWiimoteSettingChanged(menuTag, value); } if (menuTag.isWiimoteExtensionMenu()) { mView.onExtensionSettingChanged(menuTag, value); } } // Get the backing Setting, which may be null (if for example it was missing from the file) IntSetting setting = scSetting.setSelectedValue(value); if (setting != null) { mView.putSetting(setting); } else { if (scSetting.getKey().equals(SettingsFile.KEY_VIDEO_BACKEND_INDEX)) { putVideoBackendSetting(which); } else if (scSetting.getKey().equals(SettingsFile.KEY_WIIMOTE_EXTENSION)) { putExtensionSetting(which, Character.getNumericValue(scSetting.getSection().charAt(scSetting.getSection().length() - 1))); } } closeDialog(); } else if (mClickedItem instanceof StringSingleChoiceSetting) { StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem; String value = scSetting.getValueAt(which); StringSetting setting = scSetting.setSelectedValue(value); if (setting != null) { mView.putSetting(setting); } closeDialog(); } else if (mClickedItem instanceof SliderSetting) { SliderSetting sliderSetting = (SliderSetting) mClickedItem; if (sliderSetting.getSetting() instanceof FloatSetting) { float value; if (sliderSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT) || sliderSetting.getKey().equals(SettingsFile.KEY_SPEED_LIMIT)) { value = mSeekbarProgress / 100.0f; } else { value = (float) mSeekbarProgress; } FloatSetting setting = sliderSetting.setSelectedValue(value); if (setting != null) { mView.putSetting(setting); } } else { IntSetting setting = sliderSetting.setSelectedValue(mSeekbarProgress); if (setting != null) { mView.putSetting(setting); } } } mView.onSettingChanged(); mClickedItem = null; mSeekbarProgress = -1; } public void closeDialog() { // I'm guessing that I should mark the view as dirty here if (mDialog != null) { mDialog.dismiss(); mDialog = null; } } 

notifyDataSetChanged()似乎可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM