在onCreateLoader()方法中设置ListView对象的属性

时间:2017-10-01 02:35:07

标签: java android android-loader

我正在使用SimpleCursorAdapter来填充ListView。我从sqlite数据库中检索以下两个值:name并激活。在我的Row ListView中,我有一个名为alarm_activated的ToggleButton。在onCreateLoader()方法中,当数据库中的值为1时,我想将setChecked()设置为true,否则将setChecked值设置为false。此外,我想在相同的onCreateLoader()方法中更改ToggleButton的背景颜色。我已经开发了以下用于检索值的代码,它正常工作。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mydb = new DBHelper(this);

    Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, "name, activated");

    alarmlv = (ListView)findViewById(R.id.listViewAlarms);

    dataAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.listview_row, cursor,
            new String[]{ mydb.ALARMS_COLUMN_NAME, mydb.ALARMS_ACTIVATED }, new int[]{ R.id.alarm_name, R.id.alarm_activated}, 0);

    alarmlv.setAdapter(dataAdapter);
    getSupportLoaderManager().initLoader(0, null, this);

}

与此同时,我在行视图中引用ToggleButtons时遇到困难,以便如上所述设置其属性。这是我的开始代码:

    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {


    alarm_activated = (ToggleButton)row.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);
    }


    alarm_activated.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                buttonView.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
            } else {
                buttonView.getBackground().setColorFilter(Color.LTGRAY, PorterDuff.Mode.MULTIPLY);
            }
        }
    });


    return new Loader(this);
 }

1 个答案:

答案 0 :(得分:2)

您应该创建一个扩展SimpleCursorAdapter并使用它而不是SimpleCursorAdapter的自定义适配器,然后覆盖getView方法并从那里获取子元素的引用。