在 onCreateLoader() 方法中设置 ListView 对象的属性
Setting Properties of ListView Objects in onCreateLoader() Method
我正在使用 SimpleCursorAdapter 来填充 ListView。我正在从 sqlite 数据库中检索以下两个值:name 和 activated。在我的 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);
}
您应该创建一个扩展 SimpleCursorAdapter
的自定义适配器并使用它代替 SimpleCursorAdapter
,然后覆盖 getView
方法并从那里获取子元素的引用。
我正在使用 SimpleCursorAdapter 来填充 ListView。我正在从 sqlite 数据库中检索以下两个值:name 和 activated。在我的 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);
}
您应该创建一个扩展 SimpleCursorAdapter
的自定义适配器并使用它代替 SimpleCursorAdapter
,然后覆盖 getView
方法并从那里获取子元素的引用。