Android viewHolder CursorAdapter复选框不工作
Androd SQLite显示从Android viewHolder CursorAdapter复选框不工作,android,sqlite,checkbox,android-cursoradapter,android-viewholder,Android,Sqlite,Checkbox,Android Cursoradapter,Android Viewholder,Androd SQLite显示从CursorAdapter类读取的数据,而在ViewHolder中显示ListView 我希望每行都有一个复选框,可以在数据库记录中放置特定的更新 这项功能不起作用,因为当我激活第一行复选框时,您会更改屏幕上显示的最后一行记录 long _id = todo.getID(); // checkBoxFavorite.setTag(_id); checkBoxFavorite.setOnCheckedChangeListener(new CompoundButto
CursorAdapter
类读取的数据,而在ViewHolder
中显示ListView
我希望每行都有一个复选框
,可以在数据库记录中放置特定的更新
这项功能不起作用,因为当我激活第一行复选框时,您会更改屏幕上显示的最后一行记录
long _id = todo.getID(); //
checkBoxFavorite.setTag(_id);
checkBoxFavorite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
{
//Update database row
}
else if (!isChecked)
{
//Update database row
}
}
});
试试这个
public class MainActivity extends AppCompatActivity{
private RecyclerView recyclerView;
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
TestAdapter adapter = new TestAdapter();
recyclerView.setAdapter(adapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setHasFixedSize(true);
}
class TestViewHolder extends RecyclerView.ViewHolder
{
CheckBox checkBox;
public TestViewHolder(View view)
{
super(view);
checkBox=(CheckBox)view.findViewById(R.id.checkbox);
}
public void addDetail(int positon)
{
checkBox.setText(list.get(positon));
}
}
class TestAdapter extends RecyclerView.Adapter<TestViewHolder>
{
public TestAdapter()
{
}
@Override
public TestViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.recycler_item,null);
return new TestViewHolder(view);
}
@Override
public void onBindViewHolder(TestViewHolder viewHolder, int i)
{
viewHolder.addDetail(i);
}
@Override
public int getItemCount() {
return list.size();
}
}}
public类MainActivity扩展了AppCompatActivity{
私人回收站;
私有数组列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
列表=新的ArrayList();
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“c”);
列表。添加(“d”);
列表。添加(“e”);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
setLayoutManager(新的LinearLayoutManager(此,LinearLayoutManager.VERTICAL,false));
TestAdapter适配器=new TestAdapter();
recyclerView.setAdapter(适配器);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setHasFixedSize(true);
}
类TestViewHolder扩展了RecyclerView.ViewHolder
{
复选框;
公共TestViewHolder(视图)
{
超级(视图);
checkBox=(checkBox)view.findviewbyd(R.id.checkBox);
}
公共无效添加详细信息(整数位置)
{
checkBox.setText(list.get(position));
}
}
类TestAdapter扩展了RecyclerView.Adapter
{
公共测试适配器()
{
}
@凌驾
公共TestViewHolder onCreateViewHolder(视图组视图组,int i)
{
View=LayoutFlater.from(MainActivity.this).充气(R.layout.recycler\u项,空);
返回新的TestViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(TestViewHolder viewHolder,int i)
{
视图持有人。添加详细信息(i);
}
@凌驾
public int getItemCount(){
返回list.size();
}
}}
您必须在视图上使用setTag()和getTag(),您可以从此博客文章中检出
这不是一个直截了当的答案,但它将开始 为什么要在if(isChecked){}中添加另一个if
,或者如果(!isChecked){}
?虽然你只需要一个if(isChecked){}else{}
@Rami为什么if
如果在两个分支中都采取了相同的操作呢?@pskink readability@拉米什么if(expr){do_something();}else{do_something();}
@pskink-Yep在这种情况下,他根本不需要if,但可能他在做一些其他事情,而不是更新DB.getTag()=+9行。图片: