如何将数据从 Dialog Fragment 传递到 Android 中的 Activity?
在许多应用程序中,您可能已经看到,每当我们必须做出选择时,都会出现某种提升的对话框,并要求用户进行一些输入或选择。在本文中,我们将看到如何将数据从对话框传递到 android studio 中的活动。
我们将在本文中构建什么?
在本文中,我们将看到一个对话框出现并要求用户输入一条消息,相同的消息将显示在活动中。这是一个示例视频,用于了解我们将在本文中构建的内容以及对话框片段的实际含义
分步实施
步骤 1:创建一个新项目
- 打开一个新项目。
- 我们将使用Java语言开发 Empty Activity。保持所有其他选项不变。
- 您可以在方便时更改项目的名称。
- 将有两个名为 activity_main.xml 和 MainActivity 的默认文件。Java
如果您不知道如何在 Android Studio 中创建新项目,可以参考如何在 Android Studio 中创建/启动新项目?
第 2 步:使用 XML 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是 activity_main.xml 文件的代码。
XML
XML
Java
package com.example.dialogfragmenttoactivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity
implements DialogFragment.OnInputListener {
private static final String TAG = "MainActivity";
@Override public void sendInput(String input)
{
Log.d(TAG, "sendInput: got the input: " + input);
mInput = input;
setInputToTextView();
}
private Button mOpenDialog;
public TextView mInputDisplay;
public String mInput;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mOpenDialog = findViewById(R.id.open_dialog);
mInputDisplay = findViewById(R.id.input_display);
mOpenDialog.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: opening dialog.");
DialogFragment dialog
= new DialogFragment();
dialog.show(getFragmentManager(),
"MyCustomDialog");
}
});
}
private void setInputToTextView()
{
mInputDisplay.setText(mInput);
}
}
Java
package com.example.dialogfragmenttoactivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class DialogFragment
extends android.app.DialogFragment {
private static final String TAG = "DialogFragment";
public interface OnInputListener {
void sendInput(String input);
}
public OnInputListener mOnInputListener;
private EditText mInput;
private TextView mActionOk, mActionCancel;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(
R.layout.dailog_fragment, container, false);
mActionCancel
= view.findViewById(R.id.action_cancel);
mActionOk = view.findViewById(R.id.action_ok);
mInput = view.findViewById(R.id.input);
mActionCancel.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: closing dialog");
getDialog().dismiss();
}
});
mActionOk.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: capturing input");
String input
= mInput.getText().toString();
mOnInputListener.sendInput(input);
getDialog().dismiss();
}
});
return view;
}
@Override public void onAttach(Context context)
{
super.onAttach(context);
try {
mOnInputListener
= (OnInputListener)getActivity();
}
catch (ClassCastException e) {
Log.e(TAG, "onAttach: ClassCastException: "
+ e.getMessage());
}
}
}
按照路径应用 > res > 布局 > 右键单击 > 新建 > 布局资源文件 > 将其命名为“dailog_fragment.xml” 。 .以下是 dailog_fragment.xml 文件的代码 -
XML
第 3 步:使用Java文件
转到MainActivity。 Java文件并参考以下代码。下面是 MainActivity 的代码。 Java文件。
Java
package com.example.dialogfragmenttoactivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity
implements DialogFragment.OnInputListener {
private static final String TAG = "MainActivity";
@Override public void sendInput(String input)
{
Log.d(TAG, "sendInput: got the input: " + input);
mInput = input;
setInputToTextView();
}
private Button mOpenDialog;
public TextView mInputDisplay;
public String mInput;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mOpenDialog = findViewById(R.id.open_dialog);
mInputDisplay = findViewById(R.id.input_display);
mOpenDialog.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: opening dialog.");
DialogFragment dialog
= new DialogFragment();
dialog.show(getFragmentManager(),
"MyCustomDialog");
}
});
}
private void setInputToTextView()
{
mInputDisplay.setText(mInput);
}
}
按照路径app > Java > 右键单击 > new > Java类。将其命名为 DialogFragment。 Java,下面是DialogFragment的代码。 Java文件——
Java
package com.example.dialogfragmenttoactivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class DialogFragment
extends android.app.DialogFragment {
private static final String TAG = "DialogFragment";
public interface OnInputListener {
void sendInput(String input);
}
public OnInputListener mOnInputListener;
private EditText mInput;
private TextView mActionOk, mActionCancel;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(
R.layout.dailog_fragment, container, false);
mActionCancel
= view.findViewById(R.id.action_cancel);
mActionOk = view.findViewById(R.id.action_ok);
mInput = view.findViewById(R.id.input);
mActionCancel.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: closing dialog");
getDialog().dismiss();
}
});
mActionOk.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v)
{
Log.d(TAG, "onClick: capturing input");
String input
= mInput.getText().toString();
mOnInputListener.sendInput(input);
getDialog().dismiss();
}
});
return view;
}
@Override public void onAttach(Context context)
{
super.onAttach(context);
try {
mOnInputListener
= (OnInputListener)getActivity();
}
catch (ClassCastException e) {
Log.e(TAG, "onAttach: ClassCastException: "
+ e.getMessage());
}
}
}
这是我们应用程序的最终输出。
输出: