帮助创建对话框并将信息传递给它

时间:2011-07-04 09:03:31

标签: android

我创建了一个包含5行信息的屏幕。每行有2个值。 (value1value2) 在每行的末尾是一个按钮。对于每一行,我创建了一个xml文件,我正在循环并填充数据库中的值

我正在做的是当按下按钮时打开一个对话框,其中两个编辑视图填入了该行的值

然后,当在对话框上按下按钮时,数值将在数据库中更新。

我遇到createdialog / preparedialog方法的问题并将值传递给它们。

使用代码更新

public void createLayout(LinearLayout pMainlayout, String pMajorValue) {

        DatabaseTools db = new DatabaseTools(this);

        majorValue= pMajorValue;

        nameInfo = db.getNames(pMajorValue);
        name = returnName(pMajorValue);

        LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        for (int i = 0; i < nameInfo.size(); i++) {
            // Get views
            View view = (View) inflater.inflate(R.layout.mainlayout, null);
            TextView nameView = (TextView) sightmarkView.findViewById(R.id.name_title);
            TextView Value1View = (TextView) sightmarkView.findViewById(R.id.value1);
            TextView ValueView = (TextView) sightmarkView.findViewById(R.id.value2);

            Button updateButton = (Button) sightmarkView.findViewById(R.id.updatebutton);

        // Get info from Database
            nameValue = nameInfo.get(i).toString();
            value1v = db.getMark(majorValue,  nameInfo.get(i).toString());
                value2v = db.getMark(majorValue,  nameInfo.get(i).toString());
            // populate info into fields
            nameView.setText(nameValue);
            Value1View.setText(String.valueOf(value1));
            Value2View.setText(String.valueOf(value2));

            updateButton.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
            Bundle bundle = new Bundle();
                            //Code here to add values to a bundle

                            showDialog(SIGHTMARK_DIALOG_ID, bundle);

                        }
                    });

            pMainlayout.addView(view);
        }

    }

这一切都正常。显示值。我已经研究过使用bundle将它们传递给对话框

@Override
    protected Dialog onCreateDialog(int id, Bundle bundle) {
        switch(id) {
        case DIALOG_ID:
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View layout = inflater.inflate(R.layout.update, (ViewGroup) findViewById(R.id.update));
            final EditText value1Edit = (EditText) layout.findViewById(R.id.value1_current);
            final EditText value2Edit = (EditText) layout.findViewById(R.id.value2_current);

        //next pull values from bundle to populate into fields  

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setView(layout);
            // Now configure the AlertDialog
            builder.setTitle(R.string.sight_update_title);
            builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    this.removeDialog(DIALOG_ID);
                }
            });
            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    value1New = Float.parseFloat(value1Edit.getText().toString());
                    value2New = Float.parseFloat(value2Edit.getText().toString());

                // method run to update the database with the new values passed to it
                    updateMarks(value1, value2);

                    this.removeDialog(DIALOG_ID);
                }
            });
            // Create the AlertDialog and return it
            AlertDialog Dialog = builder.create();
            return Dialog;
        }
        return null;
    }

此部分存在问题,未正确获取值或将其传递给更新方法

1 个答案:

答案 0 :(得分:0)

我认为问题在于:

  

如果使用showDialog(int),活动将调用此方法   方法第一次,然后挂在它上面。任何对话框都是   由此方法创建的将自动保存和恢复   你,包括它是否正在展示。

删除参考

removeDialog(SIGHTMARK_DIALOG_ID);
showDialog(SIGHTMARK_DIALOG_ID, bundle);

documentation