我使用自定义适配器(ListAdapter.java)扩展ArrayAdapter以填充ListView(List.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();
}
}
});
答案 0 :(得分:0)
我倾向于通过在Adapter
中View
中放置getView
并在记住View
内部标记的位置时设置常规侦听器来实现此目的。
看看这个工作示例:ButtonsProblemsExampleActivity.java。
答案 1 :(得分:0)
A)由于你有一个CustomAdapter,你需要在getView中对你的ToggelButton进行内化。
B)你的String数组应该有一个默认值,可以是true或false,可以达到这样的效果
String chkCondition = hmap.get("chk").toString().toLowerCase();
Boolean blnChk = true;
if (chkCondition.equals("false"))
{ blnChk = false; }
chkBox.setChecked(blnChk);
C)然后你需要声明onClickListener,它基本上是reintallize你的origianl数组找到你的TextView值和新的chk
值。
private void setCheckValue(String Condition, String upc) {
for (int i = 0; i < data.size(); i++) {
String Upccode = data.get(i).get("UpcCode").toString();
if (Upccode.equals(upc)) {
HashMap<String, String> hmap = new HashMap<String, String>();
hmap = data.get(i);
hmap.put("chk", Condition);
data.set(i, hmap);
break;
}
}
}
D)通过声明方法调用getData()
public ArrayList<HashMap<String, String>> getData() {
return data;
}
我在CustomAdapter中使用data
。 Data
是ArrayList<HashMap<String, String>>
。
编辑我没有在切换更改时执行SQL命令。我在一个数组中收集它们。那么你的Activity中显然有一个Submit
按钮。按下提交按钮后。我从Data
获得了CustomAdapter
。这由getData()
完成,这将在您的Activity中为您提供HashMap。