- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 DialogFragment 在我的 MainActivity 中显示对话框。根据用户对对话框的 react ,我想调用 MainActivity.java 文件中定义的方法(例如 onActivityResult
,但理想情况下也是自定义方法)。
根据 ashishduh 在 this 上的回复问题,我将 DialogFragment 定义如下(在单独的 java 文件中):
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;
public class YesNoDialog extends DialogFragment {
public static final String ARG_TITLE = "YesNoDialog.Title";
public static final String ARG_MESSAGE = "YesNoDialog.Message";
public YesNoDialog() {}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{ Bundle args = getArguments();
String title = args.getString(ARG_TITLE);
String message = args.getString(ARG_MESSAGE);
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setMessage(message)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, null);
}
})
.create();
}
}
相应地,我尝试从 MainActivity 启动它,如下所示:
public void openYesNoDialog (View view) {
DialogFragment dialog = new YesNoDialog();
Bundle args = new Bundle();
args.putString(YesNoDialog.ARG_TITLE, "title");
args.putString(YesNoDialog.ARG_MESSAGE, "message");
dialog.setArguments(args);
dialog.setTargetFragment(this, YES_NO_CALL);
dialog.show(getSupportFragmentManager(), "tag");
}
其中 openYesNoDialog
由 Activity_main.xml 布局文件中的按钮触发。
我面临的问题是 setTargetFragment(this, YES_NO_CALL)
不起作用,因为“this”对应于我的 MainActivity,但 setTargetFragment 是(自然)期待一个 Fragment 并且没有 Activity。问题是我不知道在第一个参数中引用什么,因为除了 DialogFragment 我我正在尝试构建我的代码中完全没有使用 fragment 。因此,我想知道您会鼓励使用以下哪种策略来解决我的问题(甚至不确定它们是否都可能有效):
1.) 使用类似于 setTargetFragment 的方法,它允许设置目标 Activity。 (有点像“setTargetActivity”方法;如果存在这样的事情,这个解决方案对我来说听起来最简单,但我还没有找到类似的东西)。
2.) 用 Fragments 编写所有内容,并使用类似“MainFragment”的内容而不是 MainActivity。然后我可以轻松地将这个“MainFragment”引用为带有“this”的合理目标 fragment 。
3.)使用完全不同的方法(例如,不将方法放在 Activity 中,而是将方法放在 Activity 和 fragment 实现的接口(interface)中,但实际上我也想利用例如 DialogFragment 内部 Activity 的 TextViews,所以我认为这可能是一个问题)
非常感谢您的帮助。
最后一点评论:请注意,我在导入中使用 v4 支持库来支持向后兼容性,如有关对话框的 Android 教程中的建议。
这就是为什么我需要使用 getSupportFragmentManager() 而不是 getFragmentManager() 来使现在已经在工作的东西起作用。这就是我对超链接引用的代码进行轻微修改的原因。
最佳答案
getTargetFragment
和 setTargetFragment
都应该用于 Fragment 与 Fragment 之间的通信,
对于Activity
到Fragment
的通信,可以使用2种方式
您可以使用接口(interface)进行通信
您可以使用本地广播
接口(interface)通讯
在对话框 fragment 中创建一个界面,
public class YesNoDialog extends DialogFragment {
public interface OnDialogActionListener {
public void onClickDialog();
}
private OnDialogActionListener mListener;
@Override
public void onAttach(Context context) {
mListener = (OnDialogActionListener) context;
}
// Your code
@Override
public void onClick(DialogInterface dialog, int which)
{
mListener.onClickDialog();
}
}
并且在您的 Activity 中您可以实现并覆盖该函数,您将在您的 Activity 中得到回调。
关于java - 在 DialogFragment 的 onClick 方法中调用 MainActivity 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696780/
因此,我正在学习 Lynda.com 上关于使用 Google map V2 构建移动应用程序的教程,并且我正在学习一个让您创建 map 应用程序的部分,该应用程序以编程方式查找位置,而不是依赖于se
我有一个 Mainactivity,其中包含一个 Layout,它是 4 个子布局的父级。单击子布局后,我将使用一个新 fragment 替换主布局。但我无法在按下返回按钮后返回 MainActivi
如你所见 this@MainActivity 或 MainActivity@this 在 kotlin 中开始 Activity 时有效。我试图找出答案,但我什么也没找到。谁能知道它的确切区别以及哪个
Solve by using getActivity() 我有这个 MainActivity.java 和 RepeatEntry.java 在我的 MainActivity 中,我有这个代码来实现
我正在尝试将 Google Analytics 集成到我的应用程序中,并遵循来自 here 的教程一切就绪: 我有一个 MainActivity,它扩展了 Activity 并附加了三个 Tab Fr
EditText 对象未创建,为什么? EditText editText=(EditText)findViewById(R.id.edittext); 这适用于扩展 AsyncTask 类的应用程序
所以我正在尝试了解 Android Fragments。如果我将以下代码放入我的 MainActivity 中: public void getMessage(Object obj) { Lo
我试图在我的Android设备上运行我的Android应用程序,但它一直显示我的主活动不存在,尽管我的主活动类在那里。我试图创建一个新的项目,然后复制我以前的代码,它在一段时间内奏效了。但随后它又产生
//主要活动 package com.going.books; import androidx.appcompat.app.AppCompatActivity; import androi
这似乎是一个我不好意思问的基本问题,但我对我的 Fragment 学习曲线感到非常沮丧,以至于我会暴露我的无知。 教科书中的一个例子,它削减了很多角落,使得扩展变得困难,即使它们有效,也没有按钮可以点
我正在将我的启动 Activity 从“MainActivity”更改为“RealMain”我在 list 中声明了这一点,但是 MainActivity 仍然首先出现。有人可以启发我吗?代码来 se
它失败了@ below line - bindService(intent, m_serviceConnection, Context.BIND_AUTO_CREATE); 下面是轨迹.... Act
我的项目在调试状态下正常工作。当我打开MainActivity.java文件时,这在import androidx.annotation.NonNull;上显示了问题 并在下面显示错误。 FAILUR
我在 MainActivity 类中看到了这样的代码: class MainActivity : AppCompatActivity() { private val languages = a
我的问题是关于如何制作启动屏幕,并在 MainActivity 完成渲染时完成启动屏幕,而不是通过设置超时。 我已经搜索过如何制作闪屏并且我已经做到了,但主要是他们使用超时来设置闪屏何时必须关闭/完成
大家好,我正在尝试为我的 Android 手机开发一个手电筒应用程序,但是当我运行它时出现错误。 GUI 有 2 个按钮:1 个用于开灯,另一个用于关灯 这是代码: package com.examp
如何解决这个问题? MainActivity.this is not an enclosing class. 谢谢 public class uploadToServer extends AsyncT
我的 logcat 中出现一些错误,并且我的应用程序无法在我的智能手机上运行...我更改了 list 和 MainActivity 中的一些代码(名为 HomaActivity ) 这是我的 list
我想知道使用单例 MainAcitivity 是否是一个糟糕的设计选择,如下所示: public class MainActivity extends AppCompatActivity ... {
我正在创建一个像 WhatsApp 一样的应用程序,但我遇到了问题。该应用程序应该进入 LoginActivity,但它直接进入 MainActivity,而无需我登录。 我尝试更改 Android
我是一名优秀的程序员,十分优秀!