내 액티비티에서 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);
}
}
}
잘라 내기 어댑터를 만들고 데이터에 get() 및 set() 메서드를 추가 할 수 있습니다. – Rami
현재 어댑터는 이미 사용자 지정 어댑터입니다. 그래서 추상적으로 설정하고 확장 한 새로운 어댑터를 만들어야한다고 말하고 있습니까? – user2844485
아니요. 어댑터 코드를 게시하십시오. 수행해야 할 내용을 알려 드리겠습니다. – Rami