将字符串值从自定义对话框传递到另一个活动

布莱恩·J

使用自定义对话框接受用户输入,然后使用getter方法将这些值传递给另一个活动

但是,当我值传递给该字符串值输出到一个方法CSV文件shipNameanalystName等的值显示为这样的文件在空的," "虽然我已经在对话框中输入的值。

我在调试菜单的表情窗口看着字符串值调试的问题,shipNameanalystName而值表达式窗口从不更新。

我从中得知输入被传递的方法i不正确。

有谁知道为什么输出的值是空的?

这是使用的对话框类:

package ie.gmi.computing;



import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.renderscript.Sampler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MyMessageDialog {

    private Context context;
    private EditText shipText, scientistNameText , scientistEmailText , volumeText , colourText ;

    private String shipString, scientistNameString , scientistEmailString , volumeString , colourString ;



    public AlertDialog displayMessage(Context context, String title, String message){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        LayoutInflater inflater = LayoutInflater.from(context);
        final View v = inflater.inflate(R.layout.custom_view, null);
        builder.setView(v);
        shipText = (EditText)v.findViewById(R.id.shipNameEditText);
        scientistNameText = (EditText)v.findViewById(R.id.scientistEditText);
        scientistEmailText = (EditText)v.findViewById(R.id.emailEditText);
        volumeText = (EditText)v.findViewById(R.id.volumeEditText);
        colourText  = (EditText)v.findViewById(R.id.colourEditText);
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {



            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        AlertDialog dialog= builder.create();
        dialog.show();
        Button tb = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
        tb.setOnClickListener(new CustomListener(dialog));

        return dialog;
    }


    //getter/setters to allow access to string values
    //in SearchResult class
    public EditText getShipText() {
        return shipText;
    }



    public void setShipText(EditText shipText) {
        this.shipText = shipText;
    }



    public EditText getScientistNameText() {
        return scientistNameText;
    }



    public void setScientistNameText(EditText scientistNameText) {
        this.scientistNameText = scientistNameText;
    }



    public EditText getScientistEmailText() {
        return scientistEmailText;
    }


    public void setScientistEmailText(EditText scientistEmailText) {
        this.scientistEmailText = scientistEmailText;
    }



    public String getShipString() {
        return shipString;
    }


    public void setShipString(String shipString) {
        this.shipString = shipString;
    }


    public String getScientistNameString() {
        return scientistNameString;
    }


    public void setScientistNameString(String scientistNameString) {
        this.scientistNameString = scientistNameString;
    }


    public String getScientistEmailString() {
        return scientistEmailString;
    }


    public void setScientistEmailString(String scientistEmailString) {
        this.scientistEmailString = scientistEmailString;
    }


    public String getVolumeString() {
        return volumeString;
    }


    public void setVolumeString(String volumeString) {
        this.volumeString = volumeString;
    }


    public String getColourString() {
        return colourString;
    }


    public void setColourString(String colourString) {
        this.colourString = colourString;
    }


    public EditText getVolumeText() {
        return volumeText;
    }



    public void setVolumeText(EditText volumeText) {
        this.volumeText = volumeText;
    }



    public EditText getColourText() {
        return colourText;
    }



    public void setColourText(EditText colourText) {
        this.colourText = colourText;
    }



    @SuppressLint("NewApi")
    class CustomListener implements View.OnClickListener {
        private final Dialog dialog;
        public CustomListener(Dialog dialog) {
            this.dialog = dialog;
        }
        @SuppressLint("NewApi")
        @Override
        public void onClick(View v) {


            if(shipText.getText().toString().isEmpty() && !shipText.getText().toString().equals(null)){
                shipText.setError("The Field is required");

            }else if(scientistNameText.getText().toString().isEmpty() && !scientistNameText.getText().toString().equals(null)){
                scientistNameText.setError("The Field is required");
            }else if(scientistEmailText.getText().toString().isEmpty() && !scientistEmailText.getText().toString().equals(null)){
                scientistEmailText.setError("The Field is required");
            }else if(volumeText.getText().toString().isEmpty() && !volumeText.getText().toString().equals(null)){
                volumeText.setError("The Field is required");
            }else if(colourText.getText().toString().isEmpty() && !colourText.getText().toString().equals(null)){
                colourText.setError("The Field is required");
            }else{
                shipText.setError(null);
                scientistNameText.setError(null);
                scientistEmailText.setError(null);
                volumeText.setError(null);
                colourText.setError(null);


                shipString = shipText.getText().toString();
                scientistNameString = scientistNameText.getText().toString();
                scientistEmailString = scientistEmailText.getText().toString();
                volumeString = volumeText.getText().toString();
                colourString = colourText.getText().toString();


                Toast.makeText(dialog.getContext(), "The Values you get from : " +
                        "\n Ship name value: " + shipText.getText().toString() +
                        "\n Scientist name value: " + scientistNameText.getText().toString() +
                        "\n email value: " + scientistEmailText.getText().toString() +
                        "\n sample volume value: " + volumeText.getText().toString() +
                        "\n sample colour value: " + colourText.getText().toString() , Toast.LENGTH_SHORT).show();

                dialog.dismiss();
            }
        }
    }
}

当我选择设置按钮时,这就是我检索SearchResult类中的值的方式:

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_settings:

            MyMessageDialog dialog =new MyMessageDialog(); 
            dialog.displayMessage(SearchResult.this, "Sample Info", "Required");



            // store / use the values here
            shipName = dialog.getShipString();
            analystName = dialog.getScientistNameString();
            analystEmail = dialog.getScientistEmailString();
            sampleVolume = dialog.getVolumeString();
            sampleColour = dialog.getColourString();
            longitudeValue = String.valueOf(lng);
            latitudeValue = String.valueOf(lat);
            sampleMaterial = message;

            return true;

        default:
          return super.onOptionsItemSelected(item);
        } 
    } 
迈克·M

您显示的对话框是异步的;也就是说,在onOptionsItemSelected()中的代码执行不会在调用后暂停dialog.displayMessage(),因此getter会返回这些字段的初始值,在所有情况下均为null。在的onClick()方法中设置了这些字段之后,您应该创建一个由Activity实现的接口以接收回调CustomListener,然后更新Activity的变量。

在对话框类中,我们创建一个接口。例如:

public class MyMessageDialog {
    public interface DialogCallback {
        public void onValuesSet();
    }
    ...
}

确保保存对上下文的引用:

public AlertDialog displayMessage(Context context, String title, String message){
    this.context = context;
    ...
}

onClick()方法的最后,设置字段的值之后:

((DialogCallback) context).onValuesSet();

Activity需要实现我们创建的接口,对话框应该是类成员,并且字段将在接口的回调方法中设置:

public class SearchResult extends Activity 
    implements MyMessageDialog.DialogCallback {
    ...
    MyMessageDialog dialog;

    @Override
    public void onValuesSet()
    {
        shipName = dialog.getShipString();
        analystName = dialog.getScientistNameString();
        ...
    }
    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将字符串值从自定义对话框传递到另一个活动

来自分类Dev

将值传递给从另一个活动运行的对话框

来自分类Dev

从自定义提示将消息转发到另一个对话框

来自分类Dev

将对话框从一个活动传递到另一个活动

来自分类Dev

如何从另一个自定义对话框跳到一个自定义对话框

来自分类Dev

将二维字符串数组变量从1个活动传递到另一个活动

来自分类Dev

两个活动的一个自定义警报对话框

来自分类Dev

无法将字符串值从一个片段传递到另一个片段

来自分类Dev

将字符串的ArrayList从一个活动传递到另一个活动时,为什么会出现空指针异常?

来自分类Dev

如何将编辑文本字符串从一个活动传递到另一个活动中的方法?

来自分类Dev

将字符串数组传递给另一个活动

来自分类Dev

将按钮标签传递给另一个活动中的字符串

来自分类Dev

将活动中的字符串复制到另一个Android

来自分类Dev

将具有空间的字符串值传递到另一个Powershell文件

来自分类Dev

在另一个字符串中查找自定义变量字符串

来自分类Dev

通过意图将自定义数组数据传递到另一个活动

来自分类Dev

如何使用$ stateParams将字符串传递到另一个页面?

来自分类Dev

iOS将字符串传递到另一个应用程序

来自分类Dev

将字符串从UISearchBar传递到另一个viewController

来自分类Dev

如何在Android 4.4.2中的另一个对话框活动上显示对话框活动?

来自分类Dev

如何将字符串值从一个 void 方法传递到另一个 void 方法

来自分类Dev

将字符串从一个函数传递到另一个函数

来自分类Dev

C代码:将字符串从一个函数传递到另一个函数

来自分类Dev

从自定义可编辑UITableViewCell更新另一个字符串-快速通过引用传递?

来自分类Dev

NativeScript 从自定义 Android 活动导航到另一个页面

来自分类Dev

如何在Android中将两个字符串从一个活动传递到另一个活动

来自分类Dev

用自定义处理替换另一个字符串中出现的一个字符串

来自分类Dev

如何将字符串值传递给另一个活动以在媒体播放器 Android 上播放

来自分类Dev

如何从另一个模式对话框窗体传递多个信息到MDI子窗体

Related 相关文章

  1. 1

    将字符串值从自定义对话框传递到另一个活动

  2. 2

    将值传递给从另一个活动运行的对话框

  3. 3

    从自定义提示将消息转发到另一个对话框

  4. 4

    将对话框从一个活动传递到另一个活动

  5. 5

    如何从另一个自定义对话框跳到一个自定义对话框

  6. 6

    将二维字符串数组变量从1个活动传递到另一个活动

  7. 7

    两个活动的一个自定义警报对话框

  8. 8

    无法将字符串值从一个片段传递到另一个片段

  9. 9

    将字符串的ArrayList从一个活动传递到另一个活动时,为什么会出现空指针异常?

  10. 10

    如何将编辑文本字符串从一个活动传递到另一个活动中的方法?

  11. 11

    将字符串数组传递给另一个活动

  12. 12

    将按钮标签传递给另一个活动中的字符串

  13. 13

    将活动中的字符串复制到另一个Android

  14. 14

    将具有空间的字符串值传递到另一个Powershell文件

  15. 15

    在另一个字符串中查找自定义变量字符串

  16. 16

    通过意图将自定义数组数据传递到另一个活动

  17. 17

    如何使用$ stateParams将字符串传递到另一个页面?

  18. 18

    iOS将字符串传递到另一个应用程序

  19. 19

    将字符串从UISearchBar传递到另一个viewController

  20. 20

    如何在Android 4.4.2中的另一个对话框活动上显示对话框活动?

  21. 21

    如何将字符串值从一个 void 方法传递到另一个 void 方法

  22. 22

    将字符串从一个函数传递到另一个函数

  23. 23

    C代码:将字符串从一个函数传递到另一个函数

  24. 24

    从自定义可编辑UITableViewCell更新另一个字符串-快速通过引用传递?

  25. 25

    NativeScript 从自定义 Android 活动导航到另一个页面

  26. 26

    如何在Android中将两个字符串从一个活动传递到另一个活动

  27. 27

    用自定义处理替换另一个字符串中出现的一个字符串

  28. 28

    如何将字符串值传递给另一个活动以在媒体播放器 Android 上播放

  29. 29

    如何从另一个模式对话框窗体传递多个信息到MDI子窗体

热门标签

归档