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 では:

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

             }
        });
4

2 に答える 2

0

A) CustomAdapter があるため、getView で ToggelButton を intalize する必要があります。

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) メソッド呼び出しを宣言して、変更されたデータをアクティビティに返すgetData()

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

dataCustomAdapter で使用します。DataですArrayList<HashMap<String, String>>

編集トグル変更でSQLコマンドを実行しません。私はそれらを配列に集めます。次に、アクティビティに明らかにSubmitボタンがあります。一度送信ボタンを押してください。から を取得しDataますCustomAdapter。これによりgetData()、アクティビティに HashMap が表示されます。

于 2013-06-23T21:09:08.077 に答える