Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法相关的知识,希望对你有一定的参考价值。

我想知道将片段或弹出窗口类生成的变量传递给活动的可用方法是什么,只要片段或弹出窗口类与活动分开。

任何优雅方法的代码示例都表示赞赏。

答案

这一切都取决于你希望在片段或弹出窗口之间传递什么样的数据到一种方式可以使用intent

    //create an Intent object 
        Intent intent=new Intent(context, Activity.class);
    //add data to the Intent object
        intent.putExtra("text", "Data");
    //start the second activity
        startActivity(intent);

并用于接收意图数据使用

getIntent().getStringExtra("text")

另一种方法可以是使用共享偏好

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);

要读取首选项:String dateTimeKey =“com.example.app.datetime”;

//使用新的Date()使用默认值

long l = prefs.getLong(dateTimeKey, new Date().getTime()); 

编辑和保存首选项

Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();
另一答案
  1. 在片段中,使用一种返回类型为VariableCallback的方法创建一个接口(现在让我们称之为void),该方法接受的参数类型与您生成的变量的类型相同。我们称之为onVariableGenerated方法。
  2. 使托管片段的活动实现该接口。在VariableCallback类型的片段中创建一个字段。我们称之为callback
  3. 覆盖片段的onAttach(Context context)方法,并将字段设置为指向上下文。确保将上下文转换为VariableCallback
  4. 现在,当片段生成变量时,您可以调用callback.onVariableGenerated(myVariable),并将该变量传递给托管片段的活动。
  5. 确保覆盖片段的onDetach()方法以将callback字段设置为null。这将防止活动的内存泄漏。
另一答案

回答有点晚了,但还有一种方法可以让你想到:本地广播

您可以在活动中使用LocalBroadcast Manager和BroadcastListener,并从弹出窗口发送LocalBroadcast:

在您可以执行的主要活动中:

LocalBroadcastManager localBroadcastManager = 
    LocalBroadcastManager.getInstance (getApplicationContext ());

BroadcastReceiver popupdatareceiver = new BroadcastReceiver () {
    @Override
    public void onReceive(Context context, Intent intent) {
        ...
        // code to handle received data goes here
        }
    }
};

localBroadcastManager.registerReceiver (popupdatareceiver, new IntentFilter ("popupdata"));

从PopupWindow你可以像这样发送本地广播:

Intent popupdataIntent = new Intent ("popupdata");
Bundle popupdataBundle = new Bundle ();
...
// now add your data to the Bundle here
...
popupdataIntent.putExtra ("popupdata", popupdataBundle);

要将数据发送到Activity,您需要初始化LocalBroadcastManager实例并触发广播 - 这可以由Button的OnClickListener或PopupWindow的OnDismissListener触发

LocalBroadcastManager newLocalBroadcastManager = 
     LocalBroadcastManager.getInstance (getApplicationContext ());
newLocalBroadcastManager.sendBroadcast (popupdataIntent);

以上是关于Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法的主要内容,如果未能解决你的问题,请参考以下文章

使用在另一个片段(NPE)中生成的值设置片段的 TextView [重复]

图像的集合视图和弹出窗口上的单元格显示图像,也可以滚动查看其他图像

如何将 UINavigationControllerDelegate 中的自定义过渡动画应用于特定的推送和弹出事件?

如何添加模糊背景和弹出视图?

“您确定要离开此页面吗?”是如何在浏览器中生成的?

Kivy 标签和弹出窗口 + 长文本