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

时间:2018-03-23 10:33:22

标签: android android-fragments android-intent interface bundle

我有一个活动,我有一个按钮来点击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;
}

}

2 个答案:

答案 0 :(得分:0)

如果我现在必须实施它,我会使用Architecture Components与活动和片段共同ViewModel。在Share data between fragments中有更好的解释,但基本的想法是获取ViewModel的{​​{1}}:

Activity

现在您拥有了通用视图模型,该活动可以触发模型中的操作,并且片段可以从模型接收数据更新。反过来说。例如:

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

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

答案 1 :(得分:0)

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

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

使用活动总线。来自任何地方的火灾数据随处可见。

https://github.com/greenrobot/EventBus

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