Вызов метода фрагмента B из фрагмента A с использованием Kotlin - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я работаю в среде Java и пытаюсь начать работу с kotlin. Мой первый класс имеет тип Java, а следующий класс - тип Kotlin. Мой первый класс выглядит следующим образом

public class FragmentDashboard extends BaseFragment {
Button btnLaunchComplaint;
TextView tvSupport;

    public static FragmentDashboard getInstance(Bundle bundle, String title, int icon) {
        FragmentDashboard fragment = new FragmentDashboard();
        fragment.setArguments(bundle);
        fragment.setFragmentTitle(title);
        fragment.setFragmentIconId(icon);
        return fragment;
    }

    @Override
    protected void initializeControls(View v) {
        btnLaunchComplaint = v.findViewById(R.id.btnLaunchComplaint);
        tvSupport = v.findViewById(R.id.tvSupport);

    }

    @Override
    protected int getLayoutResourceId() {
        return R.layout.fragment_dashborad_layout;
    }

    @Override
    protected void initializationBundle(Bundle bundle) {

    }

    @Override
    protected void attachListeners() {
        btnLaunchComplaint.setOnClickListener(this);
        tvSupport.setOnClickListener(this);
    }

    @Override
    protected void initializeData() {
        animateViews();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnLaunchComplaint:
                FragmentForm fragmentForm = FragmentForm.getInstance(new Bundle(), "", -1);
                replaceFragment(fragmentForm, false, false, true, "");
                break;
            case R.id.tvSupport:
                FragmentSupport fragmentSupport = FragmentSupport.getInstance(new Bundle(), "", -1);
                replaceFragment(fragmentSupport, false, false, true, "");
                break;


        }
        super.onClick(view);
    }

    @Override
    public void onResume() {
        super.onResume();
        setNavigationTitle(getResources().getString(R.string.wasa_home));


    }

    private void animateViews() {
        Animation animateTopDown = AnimationUtils.loadAnimation(getActivity(), R.anim.left_in);
        btnLaunchComplaint.startAnimation(animateTopDown);
    }
}

Код моего класса Kotlin

class FragmentRegisterComplaint : BaseFragment() {

    private var etComplainantName: EditText? = null
    private var etBillAccountNo: EditText? = null
    private var etAmountPayable: EditText? = null
    private var etDueDate: EditText? = null
    private var etArrears: EditText? = null
    private var etMobile: EditText? = null
    private var etPhone: EditText? = null
    private var etAddress: EditText? = null
    private var etComplaintType: EditText? = null
    private var etComplaintSubType: EditText? = null
    private var etTown: EditText? = null
    private var etSubDivision: EditText? = null
    private var etComplainantComments: EditText? = null
    private var btnSubmit: Button? = null
    private var btnCancel: Button? = null
    private var btnIssuePicture: ImageView? = null
    private val options: DisplayImageOptions? = null
    private val etTownSelectedId = -1
    private val etSubDivisionSelectedId = -1
    private val etComplaintTypeSelectedId = -1
    private val etComplaintSubTypeSelectedId = -1
    private val relevencyId = -1
    private val priorityId = -1
    private val sourceId = -1
    fun getInstance(bundle: Bundle, title: String, icon: Int): FragmentRegisterComplaint {
        val fragment = FragmentRegisterComplaint()
        fragment.arguments = bundle
        fragment.setFragmentTitle(title)
        fragment.setFragmentIconId(icon)
        return fragment
    }

    private val isValidFields: Boolean
        get() {
            var value = 0
            if (etComplainantName!!.text.length < 1) {
                setError(etComplainantName, resources.getString(R.string.enter_complainant_name))
                value = 1
            }
            if (etBillAccountNo!!.text.length < 1) {
                setError(etBillAccountNo, resources.getString(R.string.enter_account_no))
                value = 1
            }
            if (isMobileEmpty(etMobile)) {
                setError(etMobile, resources.getString(R.string.enter_phone_no))
                value = 1
            }
            if (etComplaintTypeSelectedId < 0) {
                setError(etComplaintType, resources.getString(R.string.select_complaint_type))
                value = 1
            }
            if (etComplaintSubTypeSelectedId < 0) {
                setError(etComplaintSubType, resources.getString(R.string.select_complaint_sub_type))
                value = 1
            }
            if (etTownSelectedId < 0) {
                setError(etTown, resources.getString(R.string.select_town))
                value = 1
            }
            if (etSubDivisionSelectedId < 0) {
                setError(etSubDivision, resources.getString(R.string.select_sub_division))
                value = 1
            }

            return value == 0
        }

    override fun initializeControls(v: View) {
        etComplainantName = v.findViewById(R.id.etComplainantName)
        etBillAccountNo = v.findViewById(R.id.etBillAccountNo)
        etAmountPayable = v.findViewById(R.id.etAmountPayable)
        etDueDate = v.findViewById(R.id.etDueDate)
        etArrears = v.findViewById(R.id.etArrears)
        etMobile = v.findViewById(R.id.etMobile)
        etPhone = v.findViewById(R.id.etPhoneNo)
        etAddress = v.findViewById(R.id.etAddress)
        etComplaintType = v.findViewById(R.id.etComplaintType)
        etComplaintSubType = v.findViewById(R.id.etComplaintSubType)
        etTown = v.findViewById(R.id.etTown)
        etSubDivision = v.findViewById(R.id.etSubDivision)
        etComplainantComments = v.findViewById(R.id.etComplainantComments)
        btnSubmit = v.findViewById(R.id.btnSubmit)
        btnCancel = v.findViewById(R.id.btnCancel)
        btnIssuePicture = v.findViewById(R.id.btnIssuePicture)

    }

    override fun getLayoutResourceId(): Int {
        return R.layout.fragment_register_complaint_layout
    }

    override fun initializationBundle(bundle: Bundle) {


    }

    override fun attachListeners() {

    }

    override fun initializeData() {

    }

    override fun isMobileEmpty(editText: EditText?): Boolean {
        val strMobile = editText!!.text.toString()
        val mobileArray = strMobile.split("-".toRegex()).dropLastWhile({ it.isEmpty() }).toTypedArray()

        return mobileArray[0].contains(" ") || mobileArray[1].contains(" ")
    }


}

Мой вопрос заключается в том, как я могу вызвать метод getInstance () из класса Kotlin для класса Java. Так как в Kotlin нельзя использовать Static.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Kotlin заменил статическое на объект и комапнион

Вы можете определить вещи, которые вы хотите, как статические в объекте-компаньоне внутри класса.

как показано ниже

companion object {
        fun getInstance(bundle: Bundle, title: String, icon: Int): FragmentRegisterComplaint {
            val fragment = FragmentRegisterComplaint()
            fragment.arguments = bundle
            fragment.setFragmentTitle(title)
            fragment.setFragmentIconId(icon)
            return fragment
        }
    }
}

теперь внутри вашего Java-класса вы можете использовать это как

YorFragmentName.companion.method()
0 голосов
/ 07 сентября 2018

статический метод в java можно преобразовать в метод сопутствующего объекта с помощью аннотации @JvmStatic в kotlin:

class FragmentRegisterComplaint : BaseFragment() {
    companion object {
        @JvmStatic
        fun getInstance(bundle: Bundle, title: String, icon: Int): FragmentRegisterComplaint {
            val fragment = FragmentRegisterComplaint()
            fragment.arguments = bundle
            fragment.setFragmentTitle(title)
            fragment.setFragmentIconId(icon)
            return fragment
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...