Из моей активности У меня есть список данных, которые я передаю в адаптер RecyclerView. Адаптер берет список данных и манипулирует во время взаимодействия с пользователем.Доступ к набору данных в адаптере RecyclerView из активности
Теперь я хочу получить доступ к набору данных в адаптере для использования в моей деятельности, так что, когда пользователь поворачивает свое устройство или по какой-либо другой причине действие уничтожается и воссоздается, набор данных из адаптера может быть сохранен в и затем передается обратно в адаптер, когда активность создается снова.
Как это возможно? Адаптер RecyclerView не имеет методов для получения элементов из набора данных, например, обычного адаптера.
Мой адаптер Код:
public class MyCustomAdapter extends RecyclerView.Adapter<MyCustomAdapter.ViewHolder> implements View.OnClickListener,
EditText.OnEditorActionListener {
private ArrayList<Task> mDataset;
private static Context sContext;
// Adapter's Constructor
public MyCustomAdapter(Context context, ArrayList<Task> myDataset) {
mDataset = myDataset;
sContext = context;
}
// Create new views. This is invoked by the layout manager.
@Override
public MyCustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new view by inflating the item_row.xml
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_row, parent, false);
// Set the view to the ViewHolder
ViewHolder holder = new ViewHolder(v);
holder.myCheckBox.setOnClickListener(MyCustomAdapter.this);
holder.myItem.setOnEditorActionListener(MyCustomAdapter.this);
holder.myRow.setTag(holder);
holder.myCheckBox.setTag(holder);
holder.myItem.setTag(holder);
return holder;
}
// Replace the contents of a view. This is invoked by the layout manager.
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Task task = mDataset.get(position);
holder.myItem.setText(task.getName());
if (task.isCompleted()) {
holder.myCheckBox.setChecked(true);
holder.myItem.setPaintFlags(holder.myItem.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
holder.myItem.setTextColor(Color.parseColor("#8C000000"));
}
else {
holder.myCheckBox.setChecked(false);
holder.myItem.setPaintFlags(holder.myItem.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
holder.myItem.setTextColor(Color.parseColor("#E6000000"));
}
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
// Implement OnClick listener.
@Override
public void onClick(View view) {
ViewHolder holder = (ViewHolder) view.getTag();
if (holder.myCheckBox.isChecked()) {
Task task = mDataset.get(holder.getPosition());
task.setCompleted(true);
mDataset.set(holder.getPosition(), task);
}
else {
Task task = mDataset.get(holder.getPosition());
task.setCompleted(false);
mDataset.set(holder.getPosition(), task);
}
notifyDataSetChanged();
}
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
ViewHolder holder = (ViewHolder) view.getTag();
if (view.getText().length() != 0) {
Task task = mDataset.get(holder.getPosition());
task.setName(view.getText().toString());
mDataset.set(holder.getPosition(), task);
notifyDataSetChanged();
} else {
view.setText("");
}
return true;
}
return false;
}
// Create the ViewHolder class to keep references to your views
public static class ViewHolder extends RecyclerView.ViewHolder {
public LinearLayout myRow;
public CheckBox myCheckBox;
public EditText myItem;
/**
* Constructor
* @param v The container view which holds the elements from the item_row.xml
*/
public ViewHolder(View v) {
super(v);
myRow = (LinearLayout) v.findViewById(R.id.item_row);
myCheckBox = (CheckBox) v.findViewById(R.id.myCheckBox);
myItem = (EditText) v.findViewById(R.id.myItem);
}
}
}
Вы можете создать адаптер cutom и добавить методы get() и set() к своим данным. – Rami
. Мой текущий адаптер уже является настраиваемым адаптером. Итак, вы говорите, что мне нужно установить его как абстрактный, а затем создать новый адаптер, который расширяет его? – user2844485
Нет. Разместите свой код адаптера, я скажу вам, что вы должны делать – Rami