gpt4 book ai didi

android - recyclerview 在将新项目添加到列表时得到刷新

转载 作者:行者123 更新时间:2023-11-30 00:29:22 24 4
gpt4 key购买 nike

我有一个包含 cardview 的 recyclerview,在 cardview 里面我有一堆单选按钮和 2 个时间选择器和 2 个 textview。我需要在单击按钮时动态地将新卡片添加到 recyclerview。我为此实现了一个调整,并在单击按钮时将项目添加到列表中。

问题是当我添加一张卡并更改时间或选择单选按钮,然后再次单击添加按钮时,旧卡被刷新并且我输入的 dta 消失了,我怎样才能得到它

我有一些截图是如何工作的

请帮我解决这个问题,谢谢

这是我的代码:

适配器代码

@Override
public LabourWorkAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.labour_work_card, parent, false);
return new LabourWorkAdapter.ViewHolder(v);
}

@Override
public void onBindViewHolder(final LabourWorkAdapter.ViewHolder holder, final int position) {
final LabourWorkList listItem = labourWork.get(position);

holder.fromTime.setText(listItem.getFromDate());
holder.toTime.setText(listItem.getToDate());

// holder.cDay.setText(listItem.getFullDay());
holder.fromTimePicker.setOnClickListener(new View.OnClickListener() {
int hour_x = 0;
int minute_x = 0;

@Override
public void onClick(View view) {
TimePickerDialog mTimePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
String hr, mn, timeMode = "AM";
if (selectedHour > 12){
selectedHour = selectedHour-12;
timeMode = "PM";
}
if (selectedHour < 10){
hr = "0"+selectedHour;
}else{
hr = ""+selectedHour;
}
if (selectedMinute < 10){
mn = "0"+selectedMinute;
}else{
mn = ""+selectedMinute;
}
holder.fromTime.setText( hr + ":" + mn + timeMode);
}
}, hour_x, minute_x, false);
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});

holder.toTimePicker.setOnClickListener(new View.OnClickListener() {
int hour_x = 0;
int minute_x = 0;

@Override
public void onClick(View view) {
TimePickerDialog mTimePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
String hr, mn, timeMode = "AM";
if (selectedHour > 12){
selectedHour = selectedHour-12;
timeMode = "PM";
}
if (selectedHour < 10){
hr = "0"+selectedHour;
}else{
hr = ""+selectedHour;
}
if (selectedMinute < 10){
mn = "0"+selectedMinute;
}else{
mn = ""+selectedMinute;
}
holder.toTime.setText( hr + ":" + mn + timeMode);
}
}, hour_x, minute_x, false);
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});

holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
labourWork.remove(position);
notifyItemRemoved(position);
notifyDataSetChanged();
notifyItemRangeChanged(position, labourWork.size());
CharSequence text = "Position "+ position;
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
// holder.labourWorkDay


}



@Override
public int getItemCount() {
return labourWork.size();
}


public class ViewHolder extends RecyclerView.ViewHolder {
TextView fromTime, toTime;
Button fromTimePicker, toTimePicker;
ImageView delete;

public ViewHolder(View itemView) {
super(itemView);

fromTime = (TextView) itemView.findViewById(R.id.fromTime);
toTime = (TextView) itemView.findViewById(R.id.toTime);
fromTimePicker = (Button) itemView.findViewById(R.id.fromTimePicker);
toTimePicker = (Button) itemView.findViewById(R.id.toTimePicker);
delete = (ImageView) itemView.findViewById(R.id.deleteLabourCard);
}
}

按钮点击监听器

rId.setText(tempLabourId);

recyclerView = (RecyclerView) findViewById(R.id.workDetailsRecycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

workList = new ArrayList<>();

addItem = (FloatingActionButton) findViewById(R.id.addLabor);

addItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addToRecyclerView(sPosition);
sPosition++;
}
});


public void addToRecyclerView(int position){
LabourWorkList listItem = new LabourWorkList(position);
recyclerView.findViewHolderForAdapterPosition(position);
workList.add(listItem);

adapter = new LabourWorkAdapter(workList, LabourWork.this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}

最佳答案

Recyclerview 每次都会刷新,因为每次添加新项目并调用 notifyDataSetChanged 方法时,您都在设置适配器。

要解决这个问题,只需设置适配器一次,然后将新项目添加到列表并调用

adapter.notifyItemRangeInserted(lastListSize, newListSize);

关于android - recyclerview 在将新项目添加到列表时得到刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com