我是Android新手。如果我的问题愚蠢或多余,请原谅我。或者如果问题不是很清楚,我将再解释一次。
我面临的问题是我有一个Activity,在我要为其增加一个fragmentA。
此fragmentA在其中包含一个viewpager。 Viewpager中包含fragmentA1和FragmentA2。
现在,单击fragmentA1中的textView,将产生FragmentB,该FragmentB中包含另一个包含4个片段的ViewPager。即FragmentB1,B2,B3,B4。所有这些片段中都有RecyclerViews。以及它们各自的RecyclerView适配器。
现在,单击以免FragmentB2上的任何列表项。我希望将该列表项中的数据发送回FragmentA1。类似地,我想从子viewpager的任何片段中发送listItem数据,即FragmentB1,B2,B3,B4要发送到FragmentA1。在父片段的viewpager中。
任何人都可以帮助我解决这个问题。我已经尝试过Stackoverflow提供的各种解决方案,但到目前为止还没有运气。今天是我从事此工作的第二天,但我仍然对这个问题感到困惑。
我刚刚使用以下代码保存了应用程序的崩溃功能:
holder.chooseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecyclerOnClickHandler.onClick(combo.get(position).getRs());
Intent intent = new Intent(mFragmentActivity, mFragmentActivity.getClass());
intent.putExtra("planPrice", combo.get(position).getRs());
mFragmentActivity.getSupportFragmentManager().getFragments().get(0).onActivityResult(
mFragmentActivity.getSupportFragmentManager().getFragments().get(0).getTargetRequestCode(), RESULT_OK, intent);
mFragmentActivity.getSupportFragmentManager().popBackStack();
}
});
但是我无法传递数据。
请帮助我解决这个问题。
谢谢。
创建扩展ViewModel的类
public class SharedViewModel extends ViewModel {
private final MutableLiveData<String> priceLiveData = new MutableLiveData<String>();
public void setPrice(String price) {
selected.setValue(price);
}
public LiveData<Item> getPrice() {
return priceLiveData;
}
}
在FragmentB1,FragmetB2,FragmentB3,FragmentB4适配器中设置价格值
public class FragmentB1Adapter... {
FragmentActivity activity;
// here we need FragmentActivity so add it in construction
FragmentB1Adapter(FragmentActivity activity){
this.activity=activity;
}
//add this in onBindViewHolder
private SharedViewModel model=newViewModelProvider(activity).get(SharedViewModel.class);
//on button click
holder.chooseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
model.setPrice(price);
});
}
}
想要值的片段
public class FragmentA1 extends Fragment {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//other code
//get value of price
SharedViewModel model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
model.getPrice().observe(getViewLifecycleOwner(), { new Observer<String>() {
@Override
public void onChanged(String price) {
//here you got your price
});
}
}