0

我正在使用扩展 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 中:

一种):

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);

乙):

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();
                    }

             }
        });
4

2 回答 2

0

我倾向于通过Adapter在充气时View在内部设置通常的侦听getView器并记住该View内部标签的位置来实现这一点。

看看这个工作示例:ButtonsProblemsExampleActivity.java

于 2013-06-23T20:57:15.437 回答
0

A) 由于您有一个 CustomAdapter,您需要在 getView 中集成您的 ToggelButton。

B)您的字符串数组应该具有该按钮的默认值,可以实现类似这样的 true 或 false

String chkCondition = hmap.get("chk").toString().toLowerCase();
Boolean blnChk = true;
if (chkCondition.equals("false"))
{    blnChk = false;   }
chkBox.setChecked(blnChk);

C)然后你需要声明 onClickListener 基本上是重新安装你的原始数组,找到你的 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) 通过声明方法调用将修改后的数据返回给ActivitygetData()

public ArrayList<HashMap<String, String>> getData() {
    return data;
}

data在我的 CustomAdapter 中使用。Data是一个ArrayList<HashMap<String, String>>

编辑我在切换更改时不执行 SQL 命令。我将它们收集在一个数组中。然后你显然Submit在你的活动中有一个按钮。一旦你按下提交按钮。我DataCustomAdapter. 这样做getData()会在您的活动中为您提供 HashMap。

于 2013-06-23T21:09:08.077 回答