Android 切换ListView上的按钮

Android 切换ListView上的按钮,android,Android,从包含listview_行布局中所述切换按钮的listview获取特定切换按钮的语法是什么 我想在onCreate方法中启动每个togglebutton的状态(基于来自数据库的一些值)。我在一个循环中有以下代码,但我不确定如何将其更改为引用listview中的特定togglebutton protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo

从包含listview_行布局中所述切换按钮的listview获取特定切换按钮的语法是什么

我想在onCreate方法中启动每个togglebutton的状态(基于来自数据库的一些值)。我在一个循环中有以下代码,但我不确定如何将其更改为引用listview中的特定togglebutton

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mydb = new DBHelper(this);
    ArrayList array_list = mydb.getAllAlarms();

    for(int i = 0; i < array_list.size(); i++) {
        arrayListItem = array_list.get(i).toString();
        activationInt = Integer.parseInt(arrayListItem);

        LayoutInflater vi = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = vi.inflate(R.layout.listview_row, null);
        alarm_activated = (ToggleButton) view.findViewById(R.id.alarm_activated);

        if (activationInt == 1) {
            alarm_activated.setChecked(true);
            alarm_activated.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
        } else {
            alarm_activated.setChecked(false);
        }

    }

    ArrayAdapter arrayAdapter =
            new ArrayAdapter(this, listview_row,R.id.alarm_name,array_list);
    obj = (ListView)findViewById(R.id.listViewAlarms);
    obj.setAdapter(arrayAdapter);
    obj.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {
            String itemVal =(String) arg0.getItemAtPosition(arg2);

            Bundle dataBundle = new Bundle();
            dataBundle.putString("name", itemVal);
            Intent intent = new
                    Intent(getApplicationContext(),DisplayAlarm.class);
            intent.putExtras(dataBundle);
            startActivity(intent);
        }
    });
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mydb=新的DBHelper(this);
ArrayList数组_list=mydb.getAllAlarms();
对于(int i=0;i
更新ListView/RecyclerView的视图实际上不应该这样做

第一个原因是ListView中引用的子视图不代表行的总数,而只代表某一时刻可见的行

ListView将其项视图绑定到数据集值上,因此您最好使用包含“已检查”布尔状态的数据对象,然后在需要同步时,更新数据集并通知DataSetChange适配器


因此,您必须按照这样的示例创建自定义适配器:

更新ListView/RecyclerView的视图实际上不应该这样做

第一个原因是ListView中引用的子视图不代表行的总数,而只代表某一时刻可见的行

ListView将其项视图绑定到数据集值上,因此您最好使用包含“已检查”布尔状态的数据对象,然后在需要同步时,更新数据集并通知DataSetChange适配器


因此,您必须通过以下此类示例创建自定义适配器:

这可以帮助您感谢Umair,提供的链接确实很有用。同时,我已更改了现在显示的代码,但它仍然没有更改切换按钮的状态。您能添加更多代码吗,如执行此部分的位置?膨胀视图这对我来说似乎很奇怪,如果它们是项目视图,应该在adapter中完成。嗨,smora。我已经添加了整个onCreate方法。谢谢你的帮助。Josephok,所以你必须创建你的自定义适配器,因为这里你在膨胀“视图”但是没有添加到任何父级。请参阅我关于数据集的回答,并遵循此类示例。这可以帮助您感谢Umair,提供的链接确实很有用。同时,我已更改了现在显示的代码,但它仍然没有更改切换按钮的状态。您可以添加更多代码吗,如执行此部分的位置?膨胀vi像这样的ews对我来说似乎很奇怪,如果它们是项目视图,应该在adapter中完成。嗨,smora。我已经添加了整个onCreate方法。谢谢你的帮助。Josephok,所以你必须创建你的自定义适配器,因为这里你在膨胀“视图”但没有添加到任何父级。请参阅我关于数据集的回答,并遵循此类示例Hi smora。我已添加了整个onCreate方法。感谢您的帮助。Josephgreat;)我已使用该评论更新了我的回答这给了你一个好方法!你好,斯莫拉。我已经添加了整个onCreate方法。谢谢你的帮助。这个问题的答案可以在斯莫拉在我的原始帖子中的最后一条评论中找到。再次感谢你的帮助斯莫拉。约瑟夫很棒;)我正在用给你一个好方法的评论更新我的答案!