gpt4 book ai didi

android - RecyclerView 正在复制项目

转载 作者:行者123 更新时间:2023-12-03 09:47:39 26 4
gpt4 key购买 nike

当我滚动它时,我的 recyclerview 正在复制项目,我已经在调用 adapter.notifyDataSetChanged() .
所以,可能我在错误的地方调用数据集更新,但我找不到它是如何工作的。
这是一些代码:

       RecyclerView packageRecyclerView;
Intent intent;
ChecklistAdapter recyclerViewAdapter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checklist);

intent = getIntent();
size = intent.getIntExtra("size", 0);
Log.d(TAG, "onCreate - Qtd Questões: " + size);

packageRecyclerView = findViewById(R.id.package_lst);

LinearLayoutManager recyclerLayoutManager = new LinearLayoutManager(this);
packageRecyclerView.setLayoutManager(recyclerLayoutManager);

DividerItemDecoration dividerItemDecoration =
new DividerItemDecoration(packageRecyclerView.getContext(),
recyclerLayoutManager.getOrientation());
packageRecyclerView.addItemDecoration(dividerItemDecoration);

List<Checklist> modelList = new ArrayList<>();
recyclerViewAdapter = new ChecklistAdapter(modelList,this);
modelList = getPackages();
recyclerViewAdapter = new ChecklistAdapter(modelList,this);

// recyclerViewAdapter = new ChecklistAdapter(getPackages(),this);

packageRecyclerView.setAdapter(recyclerViewAdapter);


}

private List<Checklist> getPackages() {
List<Checklist> modelList = new ArrayList<>();
Log.d(TAG, "getPackages: " + size);
for (int i=0; i<size;i++) {

List<String> priceList = new ArrayList<>();
priceList.add("Sim");
priceList.add("Não");
priceList.add("Não se Aplica");
modelList.add(new Checklist(intent.getStringExtra("q"+i), priceList));
}

recyclerViewAdapter.notifyDataSetChanged();
return modelList;
}
这是我的适配器:
    public class ChecklistAdapter extends
RecyclerView.Adapter<ChecklistAdapter.ViewHolder> {

private List<Checklist> packageList;
private Context context;

public ChecklistAdapter(List<Checklist> packageListIn
, Context ctx) {
packageList = packageListIn;
context = ctx;
}

@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}

@Override
public void setHasStableIds(boolean hasStableIds) {
super.setHasStableIds(hasStableIds);
}

@Override
public long getItemId(int position) {
return super.getItemId(position);
}

@Override
public ChecklistAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.rv_checklistlines, parent, false);

ChecklistAdapter.ViewHolder viewHolder =
new ChecklistAdapter.ViewHolder(view);
return viewHolder;
}


@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull List<Object> payloads) {
super.onBindViewHolder(holder, position, payloads);
}

@Override
public void onBindViewHolder(ChecklistAdapter.ViewHolder holder,
int position) {
Checklist packageModel = packageList.get(position);
holder.packageName.setText(packageModel.getTitle());

int id = (position+1)*100;
for(String price : packageModel.getQuestions()){
RadioButton rb = new RadioButton(ChecklistAdapter.this.context);
rb.setId(id++);
rb.setText(price);

holder.priceGroup.addView(rb);
}
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

public TextView packageName;
public RadioGroup priceGroup;

public ViewHolder(View view) {
super(view);
packageName = view.findViewById(R.id.package_name);
priceGroup = view.findViewById(R.id.price_grp);

priceGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {

Toast.makeText(ChecklistAdapter.this.context,
"Radio button clicked " + radioGroup.getCheckedRadioButtonId(),
Toast.LENGTH_SHORT).show();

}
});
}
}
}

在下图中,您可以看到单选按钮是重复的,并且所有行中都有一些额外的空白区域。我在这里和另一个论坛上看到了很多关于这个的问题,但我不清楚在哪里调用这个更新数据集。
enter image description here
我不是高级Android开发人员,所以如果你能解释一下,对我来说会更容易。
编辑 1
list 类:
       import java.util.List;

public class Checklist {

String title;
List<String> questions;

public Checklist(String title, List<String> questions) {
this.title = title;
this.questions = questions;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public List<String> getQuestions() {
return questions;
}

public void setQuestions(List<String> questions) {
this.questions = questions;
}
编辑 2
适配器代码已更新

最佳答案

使用holder.setIsRecyclable(false)onCreateViewHolder()
它对我有用。

关于android - RecyclerView 正在复制项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819214/

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