因此,我有一個包含CardView的RecyclerView,並且在我的活動中有一個按鈕,每次點擊它都會向RecyclerView添加一張新卡。爲什麼RecyclerView添加最後一個CardView被刪除?
而在每張卡片中,我有另一個按鈕,當按下時,刪除CardView被觸摸。
問題是我向RecyclerView添加了新行,然後刪除了一些行,然後再次添加行時,新添加的行是我之前刪除的舊行。
我該如何解決這個問題?
這是我的活動:
public class MainActivity extends AppCompatActivity {
private ArrayList exercises;
private Button btnNewExercise;
private RecyclerView recyclerView;
int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
exercises = new ArrayList<>();
final RecyclerView.Adapter adapter = new RecyclerViewAdapter(exercises);
recyclerView.setAdapter(adapter);
btnNewExercise = (Button) findViewById(R.id.btnNewExercise);
btnNewExercise.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
exercises.add("Test" +i);
i++;
adapter.notifyDataSetChanged();
adapter.notifyItemInserted(exercises.size());
}
});
}
}
這是我的適配器:增加3個元素時
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private ArrayList<String> mDataset;
public RecyclerViewAdapter(ArrayList myDataset) {
mDataset = myDataset;
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_view_row, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerViewAdapter.ViewHolder viewHolder, int i) {
viewHolder.tv_exercise.setText(mDataset.get(i));
}
@Override
public int getItemCount() {
return mDataset.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv_exercise;
private Button btnEliminarRow;
public ViewHolder(View view) {
super(view);
tv_exercise = (TextView)view.findViewById(R.id.exercise_text);
btnEliminarRow = (Button) view.findViewById(R.id.btnEliminarRow);
final View posas = view;
btnEliminarRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
removeAt(getAdapterPosition());
}
});
}
public void removeAt(int position) {
mDataset.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mDataset.size());
}
}
}
日誌:
07-31 19:02:57.643 21770-21770/com.ravelinx.prueba I/System.out: Test0
07-31 19:02:58.070 21770-21770/com.ravelinx.prueba I/System.out: Test0
07-31 19:02:58.128 21770-21770/com.ravelinx.prueba I/System.out: Test1
07-31 19:02:58.505 21770-21770/com.ravelinx.prueba I/System.out: Test0
07-31 19:02:58.536 21770-21770/com.ravelinx.prueba I/System.out: Test1
07-31 19:02:58.569 21770-21770/com.ravelinx.prueba I/System.out: Test2
當刪除2個元素沒有日誌
Th
07-31 19:04:24.426 22679-22679/com.ravelinx.prueba I/System.out: Test0
07-31 19:04:24.467 22679-22679/com.ravelinx.prueba I/System.out: Test3
07-31 19:04:24.727 22679-22679/com.ravelinx.prueba I/System.out: Test0
07-31 19:04:24.769 22679-22679/com.ravelinx.prueba I/System.out: Test3
07-31 19:04:24.787 22679-22679/com.ravelinx.prueba I/System.out: Test4
下面是一個視頻顯示問題:
https://www.youtube.com/watch?v=TgFomjUJq8c
問:你如何較新的區分和更舊的? – Mani
@Mani我在每個卡片視圖中都有一個EditText,例如我在卡片視圖中寫入一些東西然後刪除它,然後我嘗試添加一個新的,然後出現舊文本。 – ravelinx
在onBindViewHolder()方法中,您可以打印mDataset.get(i)的日誌並在此處發佈日誌? – Mani