Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android viewHolder CursorAdapter复选框不工作_Android_Sqlite_Checkbox_Android Cursoradapter_Android Viewholder - Fatal编程技术网

Android viewHolder CursorAdapter复选框不工作

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

Androd SQLite显示从
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行。图片: