Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 获取ListView中的开关状态_Android_Listview_Switch Statement - Fatal编程技术网

Android 获取ListView中的开关状态

Android 获取ListView中的开关状态,android,listview,switch-statement,Android,Listview,Switch Statement,在我的应用程序中,我希望用户做出多项选择,为此,我在ListView中提供了一些开关和一个按钮来确认 问题是,当我在Button onClickListener()函数中插入db中的值时,我可以从开关中检索文本,但不能检索它们的状态(在示例中,总是输出true) btn.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ ListAdapter=list.getAdapter(); MyDatabase db=新的

在我的应用程序中,我希望用户做出多项选择,为此,我在ListView中提供了一些开关和一个按钮来确认

问题是,当我在Button onClickListener()函数中插入db中的值时,我可以从开关中检索文本,但不能检索它们的状态(在示例中,总是输出true)

btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ListAdapter=list.getAdapter();
MyDatabase db=新的MyDatabase(cntx);
db.open();

对于(int n=0;n由于您没有向ArrayAdapter.getView方法提供convertView参数,它将始终为您创建一个新的视图层次结构。因此,您将始终看到开关小部件的状态初始化为alert.get(位置)

其中一个可能的解决方案是设置OnCheckedChangeListener来切换小部件,并在切换状态发生变化时更新模型

@Override
public View getView(final int position, View view, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.notification_list_element, null, true);

    Switch s = (Switch) rowView.findViewById(R.id.switch1);
    s.setChecked(alert.get(position));
    s.setText(titles.get(position));
    s.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            alert.set(position, isChecked);
        }
    });

    return rowView;
}
这样做将允许您直接从模型获取状态,而不是试图从按钮单击事件处理程序中的开关小部件获取状态

View rowview = adapter.getView(n, null, null);
Switch swtc = (Switch) rowview.findViewById(R.id.switch1);     
db.updateAlert(swtc.isChecked(), MyDatabase.Tab_Cal_Set.Cal+"=?", args);
你会的

 db.updateAlert(alert.get(n), MyDatabase.Tab_Cal_Set.Cal+"=?", args);

此外,我建议您更新适配器以利用以获得更好的性能。

您不应该调用适配器getView方法。它由ListView内部使用。
其目的是查看如何填充其内容

如果
警报列表
用于保存
开关
选中状态,则可以使用它

btn.setOnClickListener( new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        MyDatabase db = new MyDatabase(cntx);
        db.open();
        for(int n=0;n<alert.size();n++)
        {
            String[] args = {titles.get(n)};
            if(alert.get(n))
            {
                Log.i("update", args[0]+" going to be true");
            }
            else
            {
                Log.i("update", args[0]+" going to be false");

            }
            int a = db.updateAlert(alert.get(n), MyDatabase.Tab_Cal_Set.Cal+"=?", args);
            Toast.makeText(cntx, "affected: "+Integer.toString(a), Toast.LENGTH_LONG).show();
        }
        db.close();

    }
});
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
MyDatabase db=新的MyDatabase(cntx);
db.open();

对于(int n=0;nListView使用哪种适配器?是否扩展BaseAdapter?能否提供适配器代码?
 db.updateAlert(alert.get(n), MyDatabase.Tab_Cal_Set.Cal+"=?", args);
btn.setOnClickListener( new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        MyDatabase db = new MyDatabase(cntx);
        db.open();
        for(int n=0;n<alert.size();n++)
        {
            String[] args = {titles.get(n)};
            if(alert.get(n))
            {
                Log.i("update", args[0]+" going to be true");
            }
            else
            {
                Log.i("update", args[0]+" going to be false");

            }
            int a = db.updateAlert(alert.get(n), MyDatabase.Tab_Cal_Set.Cal+"=?", args);
            Toast.makeText(cntx, "affected: "+Integer.toString(a), Toast.LENGTH_LONG).show();
        }
        db.close();

    }
});