2013-06-23 52 views
0

我使用扩展ArrayAdapter来填充ListView(List.java)的自定义适配器(ListAdapter.java)。 之后ListView行包含TextView和ToggleButton。访问ListView中的ToggleButtons

在List.java我可以注册点击的ListView行:

sett_list.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) { 

,但我怎么能注册点击切换按钮,并得到该按钮的排的位置?

编辑:@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

的意思是如何知道它是否被选中? – MDMalik

+0

是的,并在哪个行(位置)被选中的按钮。 – mgulan

+0

以及您在CustomAdapter中传递的内容。因为这是最重要的 – MDMalik

回答

0

A)因为你有一个CustomAdapter,你需要在getView中实现你的ToggelButton。

B)您的字符串数组应具有该按钮的默认值,无论是真的还是假的,可以实现这样的

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返回修改后的数据到活性的影响。 DataArrayList<HashMap<String, String>>

编辑我不在切换更改时执行SQL命令。我收集他们在一个数组中。那么你的活动显然有一个Submit按钮。一旦你按下提交按钮。我从CustomAdapter得到Data。这是通过getData()完成的,这将为您的活动提供HashMap。

+0

我编辑了我的问题。如何做D)? – mgulan

+0

@mgulan看看编辑部分 – MDMalik

+0

我没有提交按钮... ToggleButton是我的提交按钮。我可以直接从适配器切换到SQL命令吗? – mgulan

0

我倾向于在getView充气View时设置常用的听众里面Adapter还记得为View内标签位置来实现这一目标。

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

+0

仍然我不知道该怎么办...你可以把一些代码? – mgulan

+0

@mgulan我的演示项目中有很多代码。你甚至可以下载并运行它。 –