于今腐草无萤火,终古垂杨有暮鸦。这篇文章主要讲述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();
另一答案
- 在片段中,使用一种返回类型为
VariableCallback
的方法创建一个接口(现在让我们称之为void
),该方法接受的参数类型与您生成的变量的类型相同。我们称之为onVariableGenerated
方法。 - 使托管片段的活动实现该接口。在
VariableCallback
类型的片段中创建一个字段。我们称之为callback
。 - 覆盖片段的
onAttach(Context context)
方法,并将字段设置为指向上下文。确保将上下文转换为VariableCallback
。 - 现在,当片段生成变量时,您可以调用
callback.onVariableGenerated(myVariable)
,并将该变量传递给托管片段的活动。 - 确保覆盖片段的
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);
【Android(将片段和弹出窗口的点击事件中生成的变量传递给活动的方法)】要将数据发送到Activity,您需要初始化LocalBroadcastManager实例并触发广播 - 这可以由Button的OnClickListener或PopupWindow的OnDismissListener触发
LocalBroadcastManager newLocalBroadcastManager =
LocalBroadcastManager.getInstance (getApplicationContext ());
newLocalBroadcastManager.sendBroadcast (popupdataIntent);
推荐阅读
- 麻烦.apply()带'int'列的方法
- Android Clean Architecture中的登录流程
- 在Android 4.x中显示矢量图形
- android super.onBackPressed()计时
- Android P onStart在onActivityResult之前调用
- 如何在我的活动中设置Android铃声()
- 自动更改活动(Android中的横向和纵向模式)
- Android - 为什么人们反复引用内联静态上下文,而不是在Method()中传递一次()
- 从广播接收器android调用活动方法()