ArrayAdapter を拡張して ListView (List.java) を埋めるカスタム アダプタ (ListAdapter.java) を使用しています。その後、ListView 行には TextView と ToggleButton が含まれます。
List.java では、ListView 行のクリックを登録できます。
sett_list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) {
しかし、どうすればToggleButtonのクリックを登録し、そのボタンの行位置を取得できますか?
編集:@MDMalik
ListAdapter.java では:
A):
View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.settings_row, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.option);
final ToggleButton toggle = (ToggleButton) rowView.findViewById(R.id.toggle);
B):
if (values2[position].equals("on")) {
toggle.setChecked(true);
} else {
toggle.setChecked(false);
}
C):
toggle.setTag(Integer.valueOf(position));
toggle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), Integer.valueOf(position) + " : Click", Toast.LENGTH_SHORT).show();
}
});
それでおしまい。これで、クリックされたボタンの位置がわかりました。ありがとうございました。
結果をデータベースに書き込むにはどうすればよいですか?
このようなもの(機能していません):
toggle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (toggle.isChecked() == true) {
checked = 1;
myDB = SQLiteDatabase.openOrCreateDatabase("database.db", null);
myDB.execSQL("UPDATE " + TableName + " SET on_off_ = 'on' WHERE sett_ = '" + values[position] + "'");
myDB.close();
} else {
checked = 0;
myDB = SQLiteDatabase.openOrCreateDatabase("database.db", null);
myDB.execSQL("UPDATE " + TableName + " SET on_off_ = 'off' WHERE sett_ = '" + values[position] + "'");
myDB.close();
}
}
});