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

问题描述 投票:0回答:3

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

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

java android android-fragments design-patterns android-popupwindow
3个回答
1
投票

这一切都取决于你希望在片段或弹出窗口之间传递什么样的数据到一种方式可以使用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
投票
  1. 在片段中,使用一种返回类型为VariableCallback的方法创建一个接口(现在让我们称之为void),该方法接受的参数类型与您生成的变量的类型相同。我们称之为onVariableGenerated方法。
  2. 使托管片段的活动实现该接口。在VariableCallback类型的片段中创建一个字段。我们称之为callback
  3. 覆盖片段的onAttach(Context context)方法,并将字段设置为指向上下文。确保将上下文转换为VariableCallback
  4. 现在,当片段生成变量时,您可以调用callback.onVariableGenerated(myVariable),并将该变量传递给托管片段的活动。
  5. 确保覆盖片段的onDetach()方法以将callback字段设置为null。这将防止活动的内存泄漏。

0
投票

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

您可以在活动中使用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);
© www.soinside.com 2019 - 2024. All rights reserved.