0

私がやろうとしているのは、TableLayoutにチェックボックス、ボタン、スピナーを表示することです。値はWebサービスから取得され、tableRowsがTableLayoutに動的に追加されます。

最初のボタンは、リストビューを含むダイアログを作成します。リストビューには、1〜30の数字が含まれています。ユーザーがクリックしてListViewで値を選択すると、クリックした値に変更するためにボタンのテキストが必要になります。コードは、最初にクリックされたボタンに対して機能します(リストビューが最初に開かれ、値が選択されたときに、ボタンのテキストが変更されます)。しかし、2回目にリストビューを開いてボタンを選択すると、最初のボタンのテキストが変更され、クリックされたテキストは変更されません。私は何が間違っているのですか?

protected void fillTableView() {
    for (MedicineInfo temp : orderedMedList) {
        LayoutInflater inflater = getLayoutInflater();
        TableRow tr = (TableRow) inflater.inflate(
                R.layout.neworderrestockmedicinelist2, tlOrderInfo, false);
        CheckBox cbMedicine = (CheckBox) tr
                .findViewById(R.id.cbNewOrderRestockMedName);
        cbMedicine.setText(temp.vcProduct);
        Button btnQty = (Button) tr
                .findViewById(R.id.btnNewOrderRestockQty);
        Spinner spnIntakeUnit = (Spinner) tr
                .findViewById(R.id.spnNewOrderRestockIntakeUnit);
        IntakeUnitAdapter intakeUnitAda = new IntakeUnitAdapter(this);
        spnIntakeUnit.setAdapter(intakeUnitAda);
        ArrayAdapter<String> arrayAda = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, numberArray);
        arrayAda.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        tlOrderInfo.addView(tr);
        btnQty.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                dlgQty = new Dialog(mContext);
                TableRow tr = (TableRow) v.getParent();
                ListView lvQty = new ListView(mContext);
                QuantityAdapter qtyAda = new QuantityAdapter(mContext);
                lvQty.setAdapter(qtyAda);
                dlgQty.addContentView(lvQty,
                        new LinearLayout.LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT));
                ItemSelectTest test = new ItemSelectTest(tr);
                lvQty.setOnItemClickListener(test);
                showDialog(DLG_QTY);
                test = null;

            }
        });
    }
}

private class ItemSelectTest implements OnItemClickListener {
    Button btn = null;

    public ItemSelectTest(TableRow tr) {
        Button bt = (Button) tr.findViewById(R.id.btnNewOrderRestockQty);
        btn = bt;
    }

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        btn.setText(String.valueOf(arg3));
    }

}

上に示したのと同じように、ボタンを含むTableRowを渡します。onClickからvを渡してみました。問題はどちらの方法でも同じです。

ありがとう

4

1 に答える 1

1

問題は、ダイアログの表示方法にあると思います。showDialog( here )のドキュメントを見ると:

このアクティビティによって管理されるダイアログを表示します。onCreateDialog(int, Bundle) への呼び出しは、これが特定の ID に対して初めて呼び出されたときに、同じ ID で行われます。以降、ダイアログは自動的に保存され、復元されます。

おそらくあなたは に戻っdlgQtyていonCreateDialogます。問題は、そのダイアログが最初にキャッシュされることです。これに対する簡単な解決策は、作業が終わっremoveDialogたら常に呼び出すことです。

于 2012-08-18T14:43:35.260 に答える