как заменить фрагмент в kotlin из onclicklistener внутри переработчика - PullRequest
0 голосов
/ 05 мая 2019

Как я могу заменить фрагмент, когда я нажимаю на элемент внутри recyclerView

Я пробовал внутри onClickListener адаптера

    childFragmentManager
                .beginTransaction()
                .replace(R.id.framefragment2, Fragment2())
                .commit()

безуспешно, он возвращает мне

java.lang.IllegalArgumentException: No view found for id 0x7f0a0137 (com.test.justaapp:id/framefragment1) for fragment Fragmetnone{1ebd5fc #0 id=0x7f0a0137}

Вот мой xml 1-го фрагмента, уже надутого

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/framefragment1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

и макета второго кадра

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#C0C0C0">

    <FrameLayout
        android:id="@+id/framefragment2"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

Я искал часы и не могу получитьэто на работу, есть идеи?может быть, я изобразил что-то очень простое, любая помощь будет оценена по достоинству.

1 Ответ

0 голосов
/ 05 мая 2019

Вы можете реализовать интерфейс на вашем ViewHolder, а затем передать реализацию этого интерфейса своему адаптеру из своей деятельности. В вашем адаптере вы передаете реализацию при создании экземпляра CustomViewHolder (метод create).

В вашей деятельности / фрагмент:

private val adapter = YourAdapter(object: CustomViewHolder.Listener {
    fun onClick() {
        // change the fragment here with the fragment manager of your activity/fragment.
    }
})

В вашем адаптере:

class YourAdapter(private val listener: CustomViewHolder.Listener): RecyclerView.Adapter {

    ...

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return CustomViewHolder(
            LayoutInflater.from(context).inflate(R.layout.view_layout, parent, false), 
            listener
        )
    }
}

Реализация ViewHolder:

class CustomViewHolder(view: View, private val listener: Listener): ViewHolder(view) {

    ...    

    interface Listener {
        fun onClick()
    }

    fun onCreate(parent: View, listener: Listener): CustomViewHolder {
        // inflate the view and return an instance of CustomViewHolder
    }

    fun onBind() {
        button.setOnClickListener {
            listener.onClick()
        }
    }    
}

Я не тестировал этот код, но логика здесь. Вам просто нужно адаптировать его к вашему проекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...