我有两个活动 A 和 B,从活动 A,我单击一个按钮,该按钮打开一个对话框,其中包含一个由两个编辑文本字段和一个按钮组成的表单(对话框中的按钮用于启动活动 B) . 所以,我的问题是:如何将字符串从活动 B 传递到活动 A,但不关闭对话框(该字符串将用于填充两个编辑文本字段之一)。
5 回答
您需要创建一个类来存储变量。在 ActivityB 中使用设置变量的值,创建的类存储它并在 ActivityA 中获取变量的值。
创建一个类:GlobalVars.java。在这个类中放这个:
公共类 GlobalVars 扩展应用程序 {
private static String var2; public static String getVar() { return var2; } public static void setVar(String var) { var2 = var; }
}
在 ActivityB 中将这一行放到适当的位置:
String something;
GlobalVars.setVar(something);
在 ActivityA 中将这一行放到适当的位置:
String getsomething = GlobalVars.getVar();
就是这样!
听起来您想在活动 B 返回结果时保留对话框。如果是这种情况,那么您可以在 ActivityResult 上打开对话框:
- 活动一
- 点击按钮打开对话框
- 开始活动 B
- 将结果返回给活动 A
- onActivityResult 将调用
- 再次打开对话框
注意:Activity A 不能是 SingleTask、SingleInstance、SingleTop。
您可以使用广播系统将包含数据的 Intent 发送到另一个活动。
搜索 google 或 stackoverflow 有很多关于如何实现这一点的教程和示例。据我了解,您希望活动 a 得到通知并根据对话框中的某些操作填写字段。
我的建议是这样做的一种方法。其他答案也为同一问题提供了不同的解决方案。您还可以在创建对话框时注册一个接口,该对话框将从对话框内部调用并在第一个活动中执行某些操作。
我认为您需要使用 Bundle 和静态全局变量以及 onActivityResult()。如果您想将以前客户端的客户端编辑为新客户端。假设您有“ClientList”活动和“EditClient”活动
写入“EditClient”活动
Bundle extras = getIntent().getExtras();
if (extras != null)
{
String name = extras.getString(ClientList.KEY_Client);//ClientList.KEY_Client is global static variable of "ClientList" Activity.
if (name != null)
{
nameText.setText(name);//"nameText" is a EditText object represent EditText view
}
}
也许尝试使用 sharedpreferences !?