繁体   English   中英

EditText.getText()在Android中无法正常工作

[英]EditText.getText() is not working properly in Android

我有下面的代码,但我不能够检索在编辑文本框(输入的值userInput_latuserInput_lon )的字符串latitudelongitude使用这样的:

latitude = userInput_lat.getText().toString();
longitude = userInput_lon.getText().toString();
result.setText(latitude);

它什么也不打印。 您能建议一种补救方法吗?

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Prompt extends Activity {

    final Context context = this;
    private Button button, button2;
    private EditText result, result2, userInput_lat, userInput_lon;

    String latitude, longitude, phone;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prompt);

        // components from main.xml
        button = (Button) findViewById(R.id.loc);
        result = (EditText) findViewById(R.id.editTextResult);
        result2 = result;
        // add button listener
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // get prompts.xml view
                LayoutInflater li = LayoutInflater.from(context);
                View promptsView = li.inflate(R.layout.prompts, null);
                AlertDialog.Builder alertDialogBuilder_l = new AlertDialog.Builder(context);

                // set prompts.xml to alertdialog builder
                alertDialogBuilder_l.setView(promptsView);

                // final EditText userInput_lat = (EditText)
                // promptsView.findViewById(R.id.latInput);
                // final EditText userInput_lon = (EditText)
                // promptsView.findViewById(R.id.lonInput);
                userInput_lat = (EditText) promptsView.findViewById(R.id.latInput);
                userInput_lon = (EditText) promptsView.findViewById(R.id.lonInput);

                /**
                 * 
                 * code to get input to a string
                 */
                latitude = userInput_lat.getText().toString();
                longitude = userInput_lon.getText().toString();

                // set dialog message
                alertDialogBuilder_l.setCancelable(false)
                        .setPositiveButton("SET", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                // get user input and set it to result edit text

                                result.setText(latitude);
                            }
                        }).setNegativeButton("BACK", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });

                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder_l.create();

                // show it
                alertDialog.show();

            }
        });
        // ////////To set phone nymber,actions to be performed while clicking
        // 3rd button////
        button2 = (Button) findViewById(R.id.ph);
        result2 = (EditText) findViewById(R.id.editTextResult);

        // add button listener
        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // get prompts.xml view
                LayoutInflater li2 = LayoutInflater.from(context);
                View prompts_phView = li2.inflate(R.layout.prompts_ph, null);

                AlertDialog.Builder alertDialogBuilder_p = new AlertDialog.Builder(context);
                alertDialogBuilder_p.setView(prompts_phView);

                final EditText userInput_ph = (EditText) prompts_phView.findViewById(R.id.phInput);
                // code to get input to a string
                // Log.v("EditText", userInput_ph.getText().toString());
                phone = userInput_ph.getText().toString();

                // set dialog message
                alertDialogBuilder_p.setCancelable(false)
                        .setPositiveButton("SET", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                // get user input and set it to result
                                // edit text
                                result2.setText(userInput_ph.getText());
                            }
                        }).setNegativeButton("BACK", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });

                // create alert dialog
                AlertDialog alertDialog_p = alertDialogBuilder_p.create();

                // show it
                alertDialog_p.show();

            }
        });

    }

}

之所以发生这种情况,是因为在创建这些字段时会调用读取EditText值的代码,而不是在用户单击弹出窗口中的接受按钮时调用。

从逻辑上讲,当前的流程是:

  1. 膨胀弹出窗口布局
  2. 获取EditText [此刻为新分支]
  3. 阅读文字
  4. 显示弹出窗口
  5. 用户点击“设置”
  6. 结果设置为纬度值

问题是#3发生在#5之前。 将该代码移到您调用result.setText(latitude) ,就可以了。 像这样:

.setPositiveButton("SET", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int id) {
        // get user input and set it to result edit text
        latitude = userInput_lat.getText().toString();
        result.setText(latitude);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM