【问题标题】:How to call fragment from the BottomSheetDialogFragment in android如何从android中的BottomSheetDialogFragment调用片段
【发布时间】:2020-09-20 15:54:33
【问题描述】:

我发现从 BottomSheetDialog 调用 MainFragment 中的 InsertSlider 非常困难。 任何帮助和感谢

在底部表中:

public class AdminBottomSheetMainSave extends BottomSheetDialogFragment
{
 // One Method I don.t Know How To Work                  
 //((MainFragment)getContext()).InsertSliders(new ImageSlider(0,Name,Image,Price,Description));
 // Not Work Too
    MainFragment fragment = new MainFragment();
    fragment.InsertSliders(new ImageSlider(0,Name,Image,Price,Description));
}

在片段中:

public class MainFragment extends Fragment
{
public void InsertSliders(ImageSlider imageSlider)
{
    imageSliderViewModel.insert(imageSlider);
    Toast.makeText(getActivity(), "Done Insert"+imageSlider, Toast.LENGTH_SHORT).show();
}

联系方式是什么,如何进入InsertSliders

【问题讨论】:

    标签: android fragment call


    【解决方案1】:

    您应该使用接口在两个片段之间进行通信,并且您需要一个活动来实现该接口。

    在你的bottomsheetdialogfragment中定义接口:

    public class AdminBottomSheetMainSave extends BottomSheetDialogFragment
    {
        public Callback mCallback;
    
      public interface Callback{
       void insertSlider(ImageSlider slider);
      }
    
     @Override
      public void onAttach(Activity activity){
     super.onAttach(activity);
     mCallback = (Callback) activity;
    }
     @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    //...
    
    mCallback.insertSlider(new ImageSlider(0,Name,Image,Price,Description));
      }
    }
    

    然后在您的活动中,在我们的例子中 MainActivity 实现 Callback 接口并覆盖 inserSlider 方法:

     public class MainActivity extends AppCompatActivity implements Callback{
      MainFragment mainFragment;
      @Override
      public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      //...
      if(savedInstanceState == null){
         mainFragment = MainFragment.newInstance(new Bundle()); // use real bundle here
         getSupportFragmentManager()
             .beginTransaction()
             .add(R.id.fragment_holder, mainFragment, "FragMain").commit();
       }
      }
     // Interface method
     @Override
     public void insertSlider(ImageSlider slider){
     if(mainFragment != null){
          mainFragment.insertSlider(slider);
        }
     }
    

    现在在您的 MainFragment 中:

    public class MainFragment extends Fragment{
    
      public static MainFragment newInstance(Bundle args){
          MainFragment fragment = new MainFragment();
          fragment.setArguments(args);
          return fragment;
      }
    
     //... Class overrides here onCreateView etc..
    
    // define insertSlider method 
    public void insertSlider(ImageSlider slider){
    
    imageSliderViewModel.insert(slider);
    Toast.makeText(getActivity(), "Done Insert"+slider, Toast.LENGTH_SHORT).show();
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多