Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可以从对话框文本视图中获取文本,但无法从对话框编辑文本中获取文本_Android_Android Fragments_Dialog - Fatal编程技术网

Android 可以从对话框文本视图中获取文本,但无法从对话框编辑文本中获取文本

Android 可以从对话框文本视图中获取文本,但无法从对话框编辑文本中获取文本,android,android-fragments,dialog,Android,Android Fragments,Dialog,我使用自定义的DialogFragment和接口以及自定义布局创建了一个对话框,该布局将单击事件传递回对话框主机(MainActivity)。然而,我的问题是,当我试图获取对话框中EditText中输入的文本时,它返回为空字符串。有什么想法吗?我能够从对话框中的文本视图中获取文本,而不是编辑文本 添加\u class\u dialog.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

我使用自定义的DialogFragment和接口以及自定义布局创建了一个对话框,该布局将单击事件传递回对话框主机(MainActivity)。然而,我的问题是,当我试图获取对话框中EditText中输入的文本时,它返回为空字符串。有什么想法吗?我能够从对话框中的文本视图中获取文本,而不是编辑文本

添加\u class\u dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">
        <TextView
            android:id="@+id/viewClassName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Class: "
            android:textSize="25sp"
            android:textColor="@color/textColor"/>
        <EditText
            android:id="@+id/editClassName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Enter class"
            android:textSize="25sp"
            android:textColor="@color/textColor"
            android:layout_gravity="center"/>
    </LinearLayout>
</LinearLayout>
AddClassDialogFragment.java:

public class AddClassDialogFragment extends DialogFragment {
public interface AddClassDialogListener {
    void onDialogPositiveClick(DialogFragment dialog);
    void onDialogNegativeClick(DialogFragment dialog);
}
AddClassDialogListener mListener;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (AddClassDialogListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener");
    }
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final LayoutInflater inflater = getActivity().getLayoutInflater();
    builder.setView(inflater.inflate(R.layout.add_class_dialog, null));
    builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogPositiveClick(AddClassDialogFragment.this);
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogNegativeClick(AddClassDialogFragment.this);
        }
    });
    return builder.create();
}
}

您刚才为您的编辑文本引用了错误的id

public class MainActivity extends FragmentActivity implements AddClassDialogFragment.AddClassDialogListener {

TextView nameView;
EditText editName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    View vi = getLayoutInflater().inflate(R.layout.add_class_dialog, null);
    nameView = vi.findViewById(R.id.viewClassName);
    editName = vi.findViewById(R.id.editClassName);

}
public void addClass(View view) {
    AddClassDialogFragment acdf = new AddClassDialogFragment();
    acdf.show(getFragmentManager(), "ac");
}
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
    Toast.makeText(this, nameView.getText().toString(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, editName.getText().toString(), Toast.LENGTH_SHORT).show();

}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {
    Toast.makeText(this, "Cancel", Toast.LENGTH_SHORT).show();
}
}

获取TextView值的原因是您在布局中对其进行了硬编码
android:text=“Class:”
您的代码有几处错误。如果布局是针对对话框的,则不应在“活动”中对其进行膨胀。下面是您希望如何实现它。 您不需要在活动中展开布局。布局应该在对话框中膨胀,活动应该不知道该布局有什么或做什么。无论活动需要知道什么,都应该通过回调进行

package com.soulpatch.stackoverflow;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements AddClassDialogFragment.AddClassDialogListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final AddClassDialogFragment acdf = new AddClassDialogFragment();
    acdf.show(getSupportFragmentManager(), "abc");
}

@Override
public void onDialogPositiveClick(TextView textView, EditText editText) {
    Toast.makeText(this, textView.getText(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, editText.getText() == null ? "" : editText.getText().toString(), Toast.LENGTH_SHORT).show();
}

@Override
public void onDialogNegativeClick(TextView textView, EditText editText) {
    Toast.makeText(this, textView.getText(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, editText.getText() == null ? "" : editText.getText().toString(), Toast.LENGTH_SHORT).show();
}
}
DialogFragment将定义需要通过此处声明的接口返回活动的内容。我已将其更改为采用文本视图和编辑文本。您可以根据您的要求进行更改

package com.soulpatch.stackoverflow;

import android.app.Activity;    
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AddClassDialogFragment extends DialogFragment {
public interface AddClassDialogListener {
    void onDialogPositiveClick(TextView textView, EditText editText);

    void onDialogNegativeClick(TextView textView, EditText editText);
}

AddClassDialogListener mListener;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (AddClassDialogListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener");
    }
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final LayoutInflater inflater = getActivity().getLayoutInflater();
    final LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.add_class_dialog, null);
    final TextView textView = linearLayout.findViewById(R.id.viewClassName);
    final EditText editText = linearLayout.findViewById(R.id.editClassName);
    builder.setView(linearLayout);
    builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogPositiveClick(textView, editText);
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogNegativeClick(textView, editText);
        }
    });
    return builder.create();
}
}

您引用了错误的id,应该使用此editClassName,而FindViewById通过更改以下行解决了此问题:builder.setView(充气器.inflate(R.layout.add_class_dialog,null));至:查看对话框视图=充气机。充气(R.layout.add_class_对话框,空);builder.setView(dialogView);然后,我可以使用以下声明访问edittext数据:final-edittext-editClassName=dialogView.findViewById(R.id.editNameD);并将getText()值作为参数放入onDialogPositiveClick方法中。
package com.soulpatch.stackoverflow;

import android.app.Activity;    
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AddClassDialogFragment extends DialogFragment {
public interface AddClassDialogListener {
    void onDialogPositiveClick(TextView textView, EditText editText);

    void onDialogNegativeClick(TextView textView, EditText editText);
}

AddClassDialogListener mListener;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (AddClassDialogListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener");
    }
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final LayoutInflater inflater = getActivity().getLayoutInflater();
    final LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.add_class_dialog, null);
    final TextView textView = linearLayout.findViewById(R.id.viewClassName);
    final EditText editText = linearLayout.findViewById(R.id.editClassName);
    builder.setView(linearLayout);
    builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogPositiveClick(textView, editText);
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            mListener.onDialogNegativeClick(textView, editText);
        }
    });
    return builder.create();
}
}