将数据从片段发送到活动,无需任何事件处理或侦听器

Posted

技术标签:

【中文标题】将数据从片段发送到活动,无需任何事件处理或侦听器【英文标题】:send data from fragment to activity without any event handling or listeners 【发布时间】:2018-09-02 00:15:46 【问题描述】:

我有一个活动,我有一个按钮可以点击 API。我在显示片段的那个活动中也有一个框架布局。我在片段中的 createView() 上有片段上的一些数据,我想将此数据发送到任何事件处理的活动(我知道接口方法,但片段中没有任何按钮)。现在我想将片段数据带到活动的按钮单击上。这可能吗 ? 请给我一个解释。

class ForgetPass extends Activity 

LinearLayout sendOtp;
ProgressBar progress_bar;
TextView send_otp;
FragmentManager fm = getFragmentManager();

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.forget_pass);
    button.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            // get the data from the fragment
        
    );

这是我的片段,它只有 textViews,没有任何按钮,我可以在上面实现界面并将数据发送到活动。

class EnterPhone extends Fragment 
EditText mobile;
RequestQueue requestQueue;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.enter_phone, container, false);
     //Hit api and only textviews for showing information and need this on activity. On a button click which is itself in activity

    return view;

【问题讨论】:

在片段中创建一个方法,该方法将返回您需要的数据,并在活动中调用它 或者反过来,在活动中创建一个setter,但前提是你的片段是该活动的一部分 在fragment中创建一个方法并获取fragment的实例给父activity在activity中调用这个方法,这个方法做一个你去的返回类型。 您可以将该数据保存在 sharedPrefrence 中,然后从 Key 中获取该数据。 【参考方案1】:

如果我现在必须实现它,我会使用 Architecture Components 和通用 ViewModel 来表示活动和片段。在Share data between fragments 中解释得更好,但基本思想是获得ActivityViewModel

// in your fragment:
model = ViewModelProviders.of(getActivity())

// in your activity:
model = ViewModelProviders.of(this)

现在您有了公共视图模型,活动可以触发模型中的操作,并且片段可以接收来自模型的数据更新。反之亦然。例如:

// in your activity
model.updateData()

// in your fragment
model.getData().observe( data -> updateUI(data) );

【讨论】:

【参考方案2】:

您可以通过多种方式发送数据。

使用新的android Architecture Component 使用 Eventbus(最简单的方法)。 如果您已经为 Android 实现了 RXJava,请尝试 RXBus。 您可以将该数据保存在 sharedPrefrence 中,然后在 Key 的活动中获取它。

使用事件总线。 Fire Data 来自任何地方。

https://github.com/greenrobot/EventBus

但为了您的条件适合性,请使用最适合的 ViewModel Android 架构模式。

【讨论】:

以上是关于将数据从片段发送到活动,无需任何事件处理或侦听器的主要内容,如果未能解决你的问题,请参考以下文章

Java Android - 将数据从活动发送到片段

从活动中调用片段事件

将数据从活动发送到片段android工作室[重复]

如何将字符串数据从活动发送到片段?

将数据从一个片段发送到另一个片段时出错。 (两个片段都由一个活动托管)

在Android中将数据从活动发送到片段