【问题标题】:How to pass data between two fragments without any buttons?如何在没有任何按钮的情况下在两个片段之间传递数据?
【发布时间】:2019-01-23 22:29:12
【问题描述】:

我有两个片段,我通过底部导航在它们之间移动。我想在没有任何按钮的情况下在它们之间传递数据。它看起来像这样:在第一个片段中,我在编辑文本中有字符串,然后我将转到另一个片段,我想将此字符串传递给该片段中的文本视图。

第一个片段:

 public class TodayFragment extends Fragment {


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    FragmentTodayBinding fragmentTodayBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_today, null, false);
    View view = fragmentTodayBinding.getRoot();
    TodayViewModel todayViewModel = ViewModelProviders.of(this).get(TodayViewModel.class);
    fragmentTodayBinding.setTodayViewModel(todayViewModel);

    fragmentTodayBinding.setTodayFragmentInterface(new TodayFragmentInterface() {
        @Override
        public void onSearchClick(View v) {
            todayViewModel.getCity();
        }
    });

    todayViewModel.getWeather().observe(getViewLifecycleOwner(), new Observer<Weather>() {
        @Override
        public void onChanged(Weather weather) {
            fragmentTodayBinding.windTextView.setText("Wind: " + String.valueOf(weather.getWind().getSpeed()) + " km/h");
            fragmentTodayBinding.humidityTextView.setText("Humidity: " + weather.getMain().getHumidity() + " %");
            fragmentTodayBinding.pressureTextView.setText("Pressure: " + weather.getMain().getPressure() + " mBar");
            Double temp = weather.getMain().getTemp();
            DecimalFormat df = new DecimalFormat("#0.0");
            fragmentTodayBinding.tempTextView.setText(df.format(temp) + " ℃");
            String desc = weather.getDescription();
            String desc2 = Character.toString(desc.charAt(0)).toUpperCase()+desc.substring(1);
            fragmentTodayBinding.conditionTextView.setText(desc2);
            Glide.with(TodayFragment.this).load(weather.getIconUrl()).into(fragmentTodayBinding.iconImageView);
        }
    });

    return view;
}

第二个片段:

public class HourlyFragment extends Fragment {


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    FragmentHourlyBinding fragmentHourlyBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_hourly, null, false);
    View view = fragmentHourlyBinding.getRoot();
    HourlyViewModel hourlyViewModel = ViewModelProviders.of(this).get(HourlyViewModel.class);

    List<String> data = new ArrayList<>();

    RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    final RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(getActivity(), data);
    recyclerView.setAdapter(recyclerViewAdapter);


    return view;
}

}

【问题讨论】:

  • 你想通过什么事件来传递数据?一个文本观察器?您可以使用接口在片段之间传递数据。将消息传递给活动,并让活动将其传递给片段 2。

标签: android android-fragments android-intent data-binding


【解决方案1】:

这里是官方docs关于如何与片段进行通信。有多种方法可以做到这一点。您可以使用接口方法,也可以使用 GreenRobot 之类的 EventBus,也可以使用 LiveData

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多