首页 > 解决方案 > 如何从 java 片段类中调用 kotlin 片段

问题描述

这是 ActivityUtil 代码

        public class ActivityUtil {

        public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager,
                                                 @NonNull Fragment fragment, int frameId, String fragmentTag) {

            //Fragment fragment1=fragmentManager.findFragmentByTag(fragmentTag);
            Preconditions.checkNotNull(fragmentManager);
            Preconditions.checkNotNull(fragment);
            FragmentTransaction transaction = fragmentManager.beginTransaction();

                transaction.replace(frameId, fragment, fragmentTag);
                transaction.addToBackStack(fragmentTag);
                transaction.commit();


        }
        }

这是这里的主要片段类,我想通过使用 kotlin 片段添加/替换片段事务,即,CameraFragment 类

我已经使用了 Photofragment 类,现在我想更改 kotlin 片段,如何实现这种情况?

    public class ExpLotBcodeFragment extends Fragment{
     public ExpLotBcodeFragment() {      
        }  
          @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.setRetainInstance(true);
              }
        @SuppressLint("ClickableViewAccessibility")
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View root = inflater.inflate(R.layout.fragment_exp_lot_bcode, container, false);


            }


        @OnClick({R.id.scan})
        public void onClick(View view) {
                switch (view.getId()) {
                case R.id.scan:
                     //here i want to add kotlin call CameraFragment   class

                 //This is old call 
                ActivityUtil.addFragmentToActivity(getFragmentManager(), 
                photoFragment, R.id.frame_content, "photoFragment"); 

                      break;
    }

这是科特林课程

class CameraFragment : Fragment() {   

  companion object {

    fun newInstance(): CameraFragment {
      return CameraFragment ()
    }
  }


  override fun onCreateView(inflater: LayoutInflater, 
                            container: ViewGroup?, 
                            savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_exp_lot_bcode, container, false)
  }

}

从 CameraFragment 类我想添加/替换到 ExpLotBcodeFragment 类?

标签: androidkotlin

解决方案


您必须致电CameraFragment.Companion.newInstance()或直接致电new CameraFragment()才能instance获得CameraFragment. 检查以下:

@OnClick({R.id.scan})
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.scan:
            CameraFragment cameraFragment = CameraFragment.Companion.newInstance();
            ActivityUtil.addFragmentToActivity(getFragmentManager(),
                    cameraFragment, R.id.frame_content, "cameraFragment");
            break;
    }
}

推荐阅读