简体   繁体   中英

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

I want to rebind a view when closeDialog() is called. I assume that I should somehow mark the view as dirty. If this is the correct course of action to take how would I do this? My code:

 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()似乎可以解决此问题。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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