将数据从片段发送到活动,无需任何事件处理或侦听器
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
中解释得更好,但基本思想是获得Activity
的ViewModel
:
// 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 架构模式。
【讨论】:
以上是关于将数据从片段发送到活动,无需任何事件处理或侦听器的主要内容,如果未能解决你的问题,请参考以下文章