【问题标题】:How to retrieve value from EditText in AlertDialog?如何从 AlertDialog 中的 EditText 检索值?
【发布时间】:2011-08-04 01:42:04
【问题描述】:

选择后,上下文菜单选项会弹出一个 AlertDialog。我希望用户在 AlertDialog 中的 EditText 中输入文本,当用户按下 PositiveButton 时,EditText 的值能够“返回”给 main 方法。这是我班上的相关代码:

public class PassPlay extends ListActivity {
    public static final int PENALTY_ID = Menu.FIRST+1;
    public static final int FUMBLE_ID = Menu.FIRST+2;
    public static final int ADDLYDS_ID = Menu.FIRST+3;
    public static final int SAFETY_ID = Menu.FIRST+4;

    EditText ydsFromAlertDialog;

    String penYdsStr;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.passplay);

        ydsFromAlertDialog=(EditText)findViewById(R.id.passYdsLabel);

        registerForContextMenu(getListView());
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        populateMenu(menu);
        return(super.onCreateOptionsMenu(menu));
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        return(applyMenuChoice(item) || super.onOptionsItemSelected(item));
    }

    public boolean onContextItemSelected(MenuItem item) {
        return(applyMenuChoice(item) || super.onContextItemSelected(item));
    }

    private void populateMenu(Menu menu) {
        menu.add(Menu.NONE, PENALTY_ID, Menu.NONE, "Penalty");
        menu.add(Menu.NONE, FUMBLE_ID, Menu.NONE, "Fumble");
        menu.add(Menu.NONE, ADDLYDS_ID, Menu.NONE, "Additional Yards");
        menu.add(Menu.NONE, SAFETY_ID, Menu.NONE, "Safety");
    }

    private boolean applyMenuChoice(MenuItem item) {
        LayoutInflater factory = LayoutInflater.from(this);
        final View textEntryView;
        switch (item.getItemId()) {
        case PENALTY_ID:
            textEntryView = factory.inflate(R.layout.textdialog, null);
            new AlertDialog.Builder(this)
            .setView(textEntryView)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle(R.string.timeout)
            .setPositiveButton(R.string.offense, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Actions for offensive timeout
                    EditText penaltyYds=(EditText)findViewById(R.id.ydsAssessedLabel);
                    penYdsStr = penaltyYds.getText().toString();
                    ydsFromAlertDialog.setText(penYdsStr);
                }
            })
            .setNeutralButton(R.string.defense, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Actions for defensive timeout  
                }
            })
            .setNegativeButton(R.string.cancel, null)
            .show();
            return true;
        case FUMBLE_ID:
            //Fumble window
            return true;
        case ADDLYDS_ID:
            //Additional Yards window
            return true;
        case SAFETY_ID:
            //Safety window
            return true;
        }

        return(false);
    }
}

主要的 XML 布局 (passplay.xml) 具有您正常的 TextView、EditText、CheckBox 等。我想将其中一个 EditText (ydsFromAlertDialog) 设置为分配在 AlertDialog (EditText 惩罚Yds) 中输入的值。 AlertDialog 的 XML 布局(textdialog.xml)非常简单,只有一个 TextView 和一个 EditText。

当我运行程序时,以下行错误显示“应用程序已意外停止。”

penYdsStr = penaltyYds.getText().toString();

总之,我想按下菜单选项“Penalty”,有一个带有 EditText 的 AlertDialog,我在其中输入一个数字,当我按下 PositiveButton 时,EditText ydsFromAlertDialog 的值将更改为在对话框中输入的值。

实际上,我有一个包含 5 列的数据库表,其中 4 列将由普通字段填充,但第 5 列将由对话框中输入的值填充。我想如果我可以将它“返回”到“与”其余值一起使用,我也可以将它保存到与其他值相同的表记录中。

如果您需要更多信息,请告诉我。谢谢!

【问题讨论】:

    标签: android android-edittext android-alertdialog


    【解决方案1】:

    你必须从你膨胀的视图中获取 ydsAssessedLabel

    EditText penaltyYds=(EditText)textEntryView.findViewById(R.id.ydsAssessedLabel);
    

    【讨论】:

    • 谢谢。那行得通!对于这样一个简单的问题,我很抱歉如此冗长的描述。我是 Android 开发新手,感谢您关注这个简单的问题。
    • 没问题,很高兴它有帮助。我认为大多数人更喜欢有很多细节的问题,而不是难以破译/含糊不清的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2019-10-09
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多