Android 如何在回收器视图中插入元素?
我对RecyclerView有问题。 每次我试图管理Rec视图以插入、删除或更新某些元素时,我都必须与Recycler视图和notifyDataSetChange进行斗争 我试过runOnUiThread,每次这个解决方案都是无用的。 我试图在适配器或Rec视图实例中调用notifyDataSetChange 我真的需要知道如何使这项工作每次都是一个更好的开发人员。 我真的希望能明确地解决这个问题 这是我的新尝试Android 如何在回收器视图中插入元素?,android,android-recyclerview,notifydatasetchanged,Android,Android Recyclerview,Notifydatasetchanged,我对RecyclerView有问题。 每次我试图管理Rec视图以插入、删除或更新某些元素时,我都必须与Recycler视图和notifyDataSetChange进行斗争 我试过runOnUiThread,每次这个解决方案都是无用的。 我试图在适配器或Rec视图实例中调用notifyDataSetChange 我真的需要知道如何使这项工作每次都是一个更好的开发人员。 我真的希望能明确地解决这个问题 这是我的新尝试 public class MainActivity extends AppCom
public class MainActivity extends AppCompatActivity {
private Button nextTurn;
private Button submit;
private EditText name;
private EditText number;
private CounterElementAdapter mAdapter;
private RecyclerView recV;
private List<CounterElement> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nextTurn = (Button) findViewById(R.id.button2);
submit = (Button) findViewById(R.id.button);
name = (EditText) findViewById(R.id.editText);
number = (EditText) findViewById(R.id.editText2);
recV = (RecyclerView) findViewById(R.id.recV);
list = new ArrayList<CounterElement>();
mAdapter = new CounterElementAdapter(list);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recV.setLayoutManager(mLayoutManager);
recV.setItemAnimator(new DefaultItemAnimator());
recV.setAdapter(mAdapter);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(name.getText().toString().length() > 0 && number.getText().toString().length() > 0) {
mAdapter.addElement(new CounterElement(name.getText().toString(), Integer.parseInt(number.getText().toString())));
}
}
});
nextTurn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.nextTurn();
}
});
}
}
提前感谢查看了您的代码一段时间,似乎没有发现任何错误,您是使用android模拟器进行测试还是使用物理设备?有时模拟器往往是有缺陷的。
首先尝试用几个伪值初始化数组列表,然后尝试添加或删除,看看这是否有帮助,代码看起来很好。我建议你看看这个
还要试着调试代码,检查elementList是否正确更新。我在物理设备上测试了它,我会尝试按照您的建议进行。
public class CounterElementAdapter extends RecyclerView.Adapter<CounterElementAdapter.MyViewHolder> {
private List<CounterElement> elementList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView name, counter;
public MyViewHolder(View view) {
super(view);
name = view.findViewById(R.id.name);
counter = view.findViewById(R.id.counter);
}
}
public CounterElementAdapter(List<CounterElement> elementList) {
this.elementList = elementList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.element, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
CounterElement ce = elementList.get(position);
holder.name.setText(ce.getName());
holder.counter.setText(ce.getDuration());
}
@Override
public int getItemCount() {
return elementList.size();
}
public void addElement(CounterElement ce){
elementList.add(ce);
notifyDataSetChanged();
}
public void nextTurn(){
for(CounterElement ce : elementList){
if(ce.getStatus() >= 1)
ce.setStatus(ce.getStatus() - 1);
else {
elementList.remove(elementList.indexOf(ce));
notifyDataSetChanged();
}
}
}
}