Android 将值从编辑文本(由用户输入)传递到文本视图

Android 将值从编辑文本(由用户输入)传递到文本视图,android,Android,我试图将对话框中的编辑文本的值传递到同一活动的文本视图。 我使用2个单独的xml文件来进行对话和活动 运行代码时,出现无法将编辑文本转换为文本视图的错误: 请让我知道我做错了什么 我的代码: public class Water extends Activity implements OnClickListener{ Button water, date; private DatePicker date_picker; static final int DATE_D

我试图将对话框中的编辑文本的值传递到同一活动的文本视图。 我使用2个单独的xml文件来进行对话和活动

运行代码时,出现无法将编辑文本转换为文本视图的错误: 请让我知道我做错了什么

我的代码:

public class Water extends Activity implements OnClickListener{

    Button water, date;


    private DatePicker date_picker;
    static final int DATE_DIALOG_ID = 100;
    private static final int DIALOG_TEXT_ENTRY_LOG = 1;

    SimpleDateFormat formatter;
    String result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView (R.layout.diary_water);
        initialize();

        water.setOnClickListener(this);

        final Calendar calendar = Calendar.getInstance();
        formatter = new SimpleDateFormat("EEE, MMM d, yyyy");
        // 3-lettermonth name & 2-char day of month
        date.setText(formatter.format(calendar.getTime()));

    }

    private void initialize() {
        // TODO Auto-generated method stub
        water = (Button) findViewById(R.id.bGlassOfWater);
        date = (Button) findViewById(R.id.bDateWater);

    }

    @SuppressWarnings("deprecation")
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){

        case R.id.bDateWater:

            break;
        case R.id.bGlassOfWater:
            showDialog (DIALOG_TEXT_ENTRY_LOG);
            break;

        }
    }

        @Override
        public Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_TEXT_ENTRY_LOG:
            LayoutInflater wat = LayoutInflater.from(this);
            final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
            return new AlertDialog.Builder(Water.this)
                    //.setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.Water)
                    .setView(textEntryViewAcc)
                    .setPositiveButton(R.string.alert_dialog_save,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {

                                    /* User clicked OK so do some stuff */
                                    LayoutInflater wat = LayoutInflater.from(Water.this);
                                    final EditText glwat= (EditText) ((EditText) dialog).findViewById(R.id.etGlasesOfWater);
                                    result = glwat.getText().toString();
                                    TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
                                    tvwater.setText(result);
                                }


                            })
                    .setNegativeButton(R.string.alert_dialog_cancel,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {

                                    /* User clicked cancel so do some stuff */
                                    dialog.dismiss();
                                }
                            })

                            .create();
        }

        return null;
        }

}
对话框XML:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
        android:id="@+id/etGlasesOfWater"
        android:layout_width="173dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginRight="27dp"
        android:layout_marginTop="25dp"
        android:layout_toLeftOf="@+id/tvGlasses"
        android:ems="10"
        android:gravity="center_horizontal"
        android:scrollHorizontally="true"
        android:textAppearance="?android:attr/textAppearanceMedium" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tvGlasses"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/etGlasesOfWater"
        android:layout_alignBottom="@+id/etGlasesOfWater"
        android:layout_alignParentRight="true"
        android:layout_marginRight="19dp"
        android:gravity="left"
        android:text="glasses"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

检查您的xml,它看起来像是
tvGlassOfWater
是一个
EditText
,但您正试图在Java代码中转换为
TextView

TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
如果这是xml文件中的
TextView
,请发布日志和相关xml代码。

解决方案: 必须在代码的前面定义编辑文本,然后很容易调整积极按钮:

@Override
        public Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_TEXT_ENTRY_LOG:
            LayoutInflater wat = LayoutInflater.from(this);
            final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
            final EditText glwater = (EditText) textEntryViewAcc.findViewById(R.id.etGlasesOfWater);
            return new AlertDialog.Builder(Water.this)
                    //.setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.Water)
                    .setView(textEntryViewAcc)
                    .setPositiveButton(R.string.alert_dialog_save,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {

                                    String result = glwater.getText().toString();
                                    TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
                                    tvwater.setText(result);

谢谢@codeMagic的帮助:)

因为您将
对话框
转换为
编辑文本
。请这样尝试

final EditText edit = (EditText)dialog.findViewById(R.id.editText);
final TextView text = (TextView)dialog.findViewById(R.id.textView);

你不需要这么多的代码。@Akshay-我发布了日志结果广播是错误的,你不能将textview转换成edittext,反之亦然。那就是你得到了classcastException。得到了mah点吗?是的-@Gang of One GoO-找到了解决方法。发布在下面。谢谢。我已经添加了两个XML…我正在尝试将信息从编辑文本发送到文本视图。这是第86行:final EditText glwat=(EditText)((EditText)对话框);我会去掉
((EditText)
和额外的“)”因为我觉得没有必要这样做。您只需要
(EditText)dialog.findViewById(R.id.etglaseofwater)。然后尝试清理项目,“项目-->清理…”。然后再次运行它,看看它是否修复了itI。我已经删除了它,但我得到一个错误,方法finViewById(int)未定义…:(请添加一些关于解决方案的注释,说明它为什么以及如何解决问题
@Override
        public Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_TEXT_ENTRY_LOG:
            LayoutInflater wat = LayoutInflater.from(this);
            final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
            final EditText glwater = (EditText) textEntryViewAcc.findViewById(R.id.etGlasesOfWater);
            return new AlertDialog.Builder(Water.this)
                    //.setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.Water)
                    .setView(textEntryViewAcc)
                    .setPositiveButton(R.string.alert_dialog_save,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {

                                    String result = glwater.getText().toString();
                                    TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
                                    tvwater.setText(result);
final EditText edit = (EditText)dialog.findViewById(R.id.editText);
final TextView text = (TextView)dialog.findViewById(R.id.textView);