java - 从自定义对话框 View 返回值

标签 java android dialog android-alertdialog

我正在尝试为我的 Android 应用程序创建一个自定义对话框。当我尝试从“确定”按钮方法访问字段时,出现空指针异常。一旦 onclick 监听器触发,我的字段似乎就会消失。有更好的方法吗?

addchars.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/scrollBox">
<RelativeLayout
    android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/addChars">
    <AutoCompleteTextView android:layout_height="wrap_content" android:id="@+id/inCharName" android:hint="@string/txtCharacterNameBox" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_width="fill_parent">
        <requestFocus></requestFocus>
    </AutoCompleteTextView>
    <TextView android:id="@+id/textView2" android:layout_height="wrap_content" android:gravity="center" android:layout_width="wrap_content" android:text="@string/txtHP" android:layout_below="@+id/inCharName" android:layout_alignParentLeft="true" android:layout_marginLeft="22dp"></TextView>
    <TextView android:id="@+id/textView3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/txtTempHP" android:layout_below="@+id/inCharName" android:layout_alignParentRight="true" android:layout_marginRight="57dp"></TextView>
    <EditText android:id="@+id/inHP" android:digits="-0123456789" android:minEms="3" android:gravity="center" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="3" android:layout_width="wrap_content" android:layout_below="@+id/textView2" android:layout_alignLeft="@+id/textView2">
    </EditText>
    <EditText android:id="@+id/inTempHP" android:digits="0123456789" android:minEms="3" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="3" android:layout_width="wrap_content" android:layout_alignBaseline="@+id/inHP" android:layout_alignBottom="@+id/inHP" android:layout_alignLeft="@+id/textView3"></EditText>
    <TextView android:id="@+id/TextView01" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/inHP" android:layout_alignLeft="@+id/inHP" android:text="@string/txtInitRoll"></TextView>
    <TextView android:id="@+id/TextView02" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/inTempHP" android:layout_alignLeft="@+id/inTempHP" android:text="@string/txtInitBonus"></TextView>
    <EditText android:digits="0123456789" android:minEms="3" android:layout_height="wrap_content" android:gravity="center" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_below="@+id/TextView01" android:layout_alignLeft="@+id/TextView01" android:id="@+id/inInitRoll"></EditText>
    <EditText android:digits="0123456789" android:minEms="3" android:layout_height="wrap_content" android:gravity="center" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_below="@+id/TextView02" android:layout_alignLeft="@+id/TextView02" android:id="@+id/inInitBonus"></EditText>
    <TextView android:id="@+id/TextView03" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/txtAC" android:layout_below="@+id/inInitRoll" android:layout_alignRight="@+id/textView2"></TextView>
    <EditText android:id="@+id/inAC" android:digits="0123456789" android:gravity="center" android:minEms="3" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_below="@+id/TextView03" android:layout_alignLeft="@+id/TextView03"></EditText>
    <TextView android:id="@+id/TextView04" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_above="@+id/inAC" android:layout_alignLeft="@+id/inInitBonus" android:text="@string/txtFortitude"></TextView>
    <EditText android:digits="0123456789" android:gravity="center" android:minEms="3" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_below="@+id/TextView04" android:layout_alignLeft="@+id/TextView04" android:id="@+id/inFort"></EditText>
    <TextView android:id="@+id/TextView06" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/inFort" android:layout_alignLeft="@+id/inFort" android:text="@string/txtWill"></TextView>
    <TextView android:id="@+id/TextView05" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/inAC" android:layout_alignLeft="@+id/inAC" android:text="@string/txtRef"></TextView>
    <EditText android:digits="0123456789" android:gravity="center" android:minEms="3" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_below="@+id/TextView05" android:layout_alignLeft="@+id/inInitRoll" android:id="@+id/inReflex"></EditText>
    <EditText android:id="@+id/inWill" android:digits="0123456789" android:gravity="center" android:minEms="3" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="2" android:layout_width="wrap_content" android:layout_above="@+id/chkRoll" android:layout_alignLeft="@+id/TextView06"></EditText>
    <CheckBox android:text="@string/txtRollBox" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/chkRoll" android:layout_below="@+id/inReflex" android:layout_alignLeft="@+id/TextView05" android:layout_alignParentRight="true"></CheckBox>
</RelativeLayout>
 </ScrollView>

这是我的警报对话框:

addBtn.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            //this block is to prep the layout for the alert dialog.
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View addView = inflater.inflate(R.layout.addchars, (ViewGroup) findViewById(R.id.scrollBox));


            //taking this part out to try a better way.

            new AlertDialog.Builder(initiative.this)
            .setTitle("Add a Character")
            .setView(addView)
            .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int whichButton)
                {
                    //ui controls
                    AutoCompleteTextView characterName = (AutoCompleteTextView) findViewById(R.id.inCharName);
                    EditText hp = (EditText) findViewById(R.id.inHP); 
                    EditText tempHp = (EditText) findViewById(R.id.inTempHP);
                    EditText initRoll = (EditText) findViewById(R.id.inInitRoll);
                    EditText initBonus = (EditText) findViewById(R.id.inInitBonus);
                    EditText ac = (EditText) findViewById(R.id.inAC); 
                    EditText fort = (EditText) findViewById(R.id.inFort);
                    EditText reflex = (EditText) findViewById(R.id.inReflex);
                    EditText will = (EditText) findViewById(R.id.inWill);
                    CheckBox rollInit = (CheckBox) findViewById(R.id.chkRoll);

                    //variables for various checks
                    entriesOk=false;
                    needToRoll=false;


                    if(characterName.getText().length() > 0)
                    {
                        holdCharacterName = characterName.getText().toString();
                        if(hp.getText().length() > 0)
                        {
                            holdHp = hp.getText().toString();
                            if(initBonus.getText().length() > 0)
                            {

                                holdInitBonus = initBonus.getText().toString();

                                if(ac.getText().length() > 0)
                                {
                                    holdAc = ac.getText().toString();
                                    if(fort.getText().length() > 0)
                                    {
                                        holdFort = fort.getText().toString();
                                        if(reflex.getText().length() > 0)
                                        {
                                            holdReflex = reflex.getText().toString();
                                            if(will.getText().length() > 0)
                                            {
                                                holdWill = will.getText().toString();
                                                if(tempHp.getText().length() == 0)
                                                {
                                                    holdTempHp = "0";
                                                    tempHp.setText("0");
                                                }
                                                else
                                                {
                                                    holdTempHp = tempHp.getText().toString();
                                                }

                                                if(rollInit.isChecked())
                                                {
                                                    entriesOk = true;
                                                    needToRoll = true;
                                                }
                                                else
                                                {
                                                    if(initRoll.getText().length() > 0)
                                                    {
                                                        holdInitRoll = initRoll.getText().toString();
                                                        entriesOk = true;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    btnLogic();
                }
            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int whichButton)
                {
                    //do nothing
                }
            }).show();

最佳答案

addView.findViewById(R.id.inHP) 而不是 findViewById(R.id.inHP)

关于java - 从自定义对话框 View 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810535/

相关文章:

android - 如何将 Drawable 转换为位图?

android - 有没有办法回滚 Android Studio 更新?

android - 为我的自定义 DialogPreference 设置主题?

javascript - jquery 对话框提交按钮无法控制启用/禁用

java - 如果字符串具有相同的前缀和后缀,则删除字符串的最后 3 个字符

java - 如何理解Ehcache Elements中的 "CreationTime"和其他时间?

java - 如何复制 Collection.sort 到另一个数组列表

java - 如何在JAVA Netbeans中调整jLabel内的图像大小?

java - 在 GRPC 中拦截/记录请求和响应

jsf-2 - 处理 ViewExireException/ajax 并显示 Primefaces 对话框