Android 从EditText获取数据

Android 从EditText获取数据,android,Android,我对安卓系统的开发相当陌生,我知道关于这个话题已经有了一些答案。虽然我读过的每一本书我都试过,但都没有成功。想法很简单,无论输入到Edittext对话框的数据是什么,它都应该出现在主活动屏幕上。现在,我已经尝试了整个value.getText()和value.getText().toString();(尽管不需要使用toString()作为其已存在的字符串。) 不确定我在这里遗漏了什么:s final Context context = this; public EditText test; R

我对安卓系统的开发相当陌生,我知道关于这个话题已经有了一些答案。虽然我读过的每一本书我都试过,但都没有成功。想法很简单,无论输入到Edittext对话框的数据是什么,它都应该出现在主活动屏幕上。现在,我已经尝试了整个value.getText()和value.getText().toString();(尽管不需要使用toString()作为其已存在的字符串。)

不确定我在这里遗漏了什么:s

final Context context = this;
public EditText test;
RelativeLayout layout;
public EditText data;
String value;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(true);
    actionBar.setIcon(R.mipmap.ic_launcher);

    layout = (RelativeLayout) findViewById(R.id.main);
    data = (EditText) findViewById(R.id.dialog);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.menu_main, menu);
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.add_item) {
        add_item();
        return true;
    } else if(id == R.id.action_settings) {
        Intent intent = new Intent(getBaseContext(), SettingsActivity.class);
        startActivity(intent);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

private void add_item() {

    LayoutInflater li = LayoutInflater.from(context);
    View dialog = li.inflate(R.layout.dialog, null);
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

    alertDialogBuilder.setView(dialog);

    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            value = data.getText().toString();
                            TextView tv = new TextView(context);
                            tv.setText(value);
                            tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                            layout.addView(tv);
                            Toast.makeText(context, value, Toast.LENGTH_LONG).show();
                        }
                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

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

    // show it
    alertDialog.show();
}

}

对话框作为自己的布局,使用
查看对话框=li.充气(R.layout.Dialog,null)并使用
alertDialogBuilder.setView(对话框)进行设置

确保id为
对话框
的编辑文本位于
对话框
布局中,并 充气后设置
数据(编辑文本)
,如:

View dialog = li.inflate(R.layout.dialog, null);
data = (EditText) dialog.findViewById(R.id.dialog);

当我创建
final EditText data=(EditText)dialog.findviewbyd(R.id.dialog)时它指向了错误的id它应该指向正确的EditText id,它应该是
最终的EditText数据=(EditText)对话框


这就解决了问题。

如果使用调试器并单步执行
onClick()
方法,执行这行代码后
value
包含什么:
value=data.getText().toString()?我不认为OP的
EditText
对话框中。看起来,
EditText
活动
布局中,他正在使用对话框确认将文本添加到
活动
布局中。根据他的
add\u item
方法,他正在膨胀对话框要使用的视图。可能他在
R.layout.dialog
中缺少EditText,但他明确地将EditText保存在activity Create的数据成员中。我已经更新了答案,以防止他了解这个案例是的,他正在扩大对话中使用的视图。但这与问题无关。他在对话框中膨胀的视图中没有任何
EditText
。无论如何,OP发现了他的问题。这与我3小时前的答案完全相同。