ListView上的ToggleButtons

时间:2017-08-19 12:36:06

标签: android

从listview中包含所述togglebuttons的listview中获取特定togglebutton的语法是什么?

我想在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);
        }
    });

谢谢。

约瑟夫

1 个答案:

答案 0 :(得分:2)

不应该以这种方式真正更新ListView / RecyclerView的视图。

首先,因为ListView中引用的子视图不代表行的总体,而只代表某一行的可见行。

ListView将其项目视图绑定到DataSet值,因此您最好使用包含&#34;已检查&#34;的数据对象。布尔状态,然后当您需要同步时,更新您的DataSet和notifyDataSetChange您的适配器。

因此,您必须按照以下示例创建自定义适配器:Custom Adapter for List View