访问ListView中的ToggleButtons

时间:2013-06-23 20:37:21

标签: android listview get position togglebutton

我使用自定义适配器(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();
                    }

             }
        });

2 个答案:

答案 0 :(得分:0)

我倾向于通过在AdapterView中放置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()

将修改后的数据返回给Activity
public ArrayList<HashMap<String, String>> getData() {
    return data;
}

我在CustomAdapter中使用dataDataArrayList<HashMap<String, String>>

编辑我没有在切换更改时执行SQL命令。我在一个数组中收集它们。那么你的Activity中显然有一个Submit按钮。按下提交按钮后。我从Data获得了CustomAdapter。这由getData()完成,这将在您的Activity中为您提供HashMap。