我知道RecycerView类中没有默认的选择方法,但我尝试了以下方法,
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mTextView.setText(fonts.get(position).getName());
holder.checkBox.setChecked(fonts.get(position).isSelected());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
for (int i = 0; i < fonts.size(); i++) {
fonts.get(i).setSelected(false);
}
fonts.get(position).setSelected(isChecked);
}
}
});
}
在尝试这段代码时,我得到了预期的输出,但完全不是。
我将用图像来解释这一点。
我如何克服这个问题?有时,如果我快速滚动列表,就会选择其他项目。如何克服这个问题呢?
更新
当我试图在fonts.get(position).setselected(isChecked);
之后使用notifydatasetchanged()
时,
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:1462)
at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:2982)
at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:7493)
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:4338)
at com.app.myapp.screens.RecycleAdapter.onRowSelect(RecycleAdapter.java:111)
问题的解决方案:
public class yourRecyclerViewAdapter extends RecyclerView.Adapter<yourRecyclerViewAdapter.yourViewHolder> {
private static CheckBox lastChecked = null;
private static int lastCheckedPos = 0;
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mTextView.setText(fonts.get(position).getName());
holder.checkBox.setChecked(fonts.get(position).isSelected());
holder.checkBox.setTag(new Integer(position));
//for default check in first item
if(position == 0 && fonts.get(0).isSelected() && holder.checkBox.isChecked())
{
lastChecked = holder.checkBox;
lastCheckedPos = 0;
}
holder.checkBox.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
CheckBox cb = (CheckBox)v;
int clickedPos = ((Integer)cb.getTag()).intValue();
if(cb.isChecked())
{
if(lastChecked != null)
{
lastChecked.setChecked(false);
fonts.get(lastCheckedPos).setSelected(false);
}
lastChecked = cb;
lastCheckedPos = clickedPos;
}
else
lastChecked = null;
fonts.get(clickedPos).setSelected(cb.isChecked);
}
});
}
}
希望这能帮上忙!
我有一个RecycerView,其中每个项目都有3个radiobuttons分组在一个RadioGroup中。现在,用户只能在RecycerView中为每个项目选择一个radiobutton。但是我希望用户在整个RecycerView中只选择一个radiobutton。如何做到这一点? 这就是它目前的样子。 我希望在整个回收器视图中只检查1个radiobutton。如果选中了第一项中的第一个单选按
我有一个RecycerView与RadioButton我只是想选择一个RadioButton不太多在同一时间和我的代码使它工作的很好,但当我重复选择从上到下的选择消失我如何才能修复它请谢谢。
问题内容: 我正在用php(mysql)生成报告, 例如: 这样我有12张桌子。 我可以在单个查询中做到吗。如果我做到了?过程变慢了吗? 问题答案:
我在你的论坛上潜伏了一段时间,他们在我遇到的各种问题上给了我巨大的帮助,所以谢谢!:d 我正试图创建我的第一个android应用程序,这是一个纸牌游戏,名为shithead,我和我的朋友们过去经常玩。 我觉得我必须非常接近,我只是错过了一些与android或android Studio工作的关键语法。 在我的卡片对象中,我构建了一个字符串idText,它与我保存在Android Studio中我的