Расширяемая карта AndroidПросмотреть существующий адаптер - PullRequest
1 голос
/ 08 апреля 2019

Хорошо, у меня есть существующий пользовательский адаптер представления переработчика, который заполняет представление переработчика, используя предоставленные элементы, и устанавливает атрибуты в макете, который у меня есть, как показано ниже, я постараюсь удалить ненужные элементы из кода

class TransactionAdapter(val context: Context, var transactions: List<Transaction>) :
androidx.recyclerview.widget.RecyclerView.Adapter<TransactionAdapter.CustomViewHolder>() {
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CustomViewHolder {
    val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    val view = inflater.inflate(R.layout.transaction_list_inner_view, p0, false)
    return CustomViewHolder(view)
}



override fun onBindViewHolder(p0: CustomViewHolder, p1: Int) {
    p0.transactionNameTextView?.text = transactions[p1].title
    p0.transactionAmountTextView?.text = transactions[p1].amount
    if (!transactions[p1].location.isNullOrEmpty()) {
        p0.transactionLocationTextView?.text = transactions[p1].location
    } else {
        p0.transactionLocationTextView?.text = "N/A"
    }
    p0.transactionTimeTextView?.text = transactions[p1].createdAt
    p0.transactionDeleteButton?.setOnClickListener { println("working delete") }
}


class CustomViewHolder(v: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(v) {
    val transactionNameTextView: TextView? = v.findViewById(R.id.transactionNameTextView) as TextView?
    val transactionAmountTextView: TextView? = v.findViewById(R.id.transactionAmountTextView) as TextView?
    val transactionLocationTextView: TextView? = v.findViewById(R.id.transactionLocationTextView) as TextView?
    val transactionTimeTextView: TextView? = v.findViewById(R.id.transactionTimeTextView) as TextView?
    val transactionDeleteButton: AppCompatButton? = v.findViewById(R.id.transactionDeleteButton) as AppCompatButton?

}
}

Теперь я хочу реализовать эту библиотеку, чтобы использовать вместо нее расширяемые виды карточек, чтобы я мог показывать, например, только имя и количество транзакций, а остальные можно развернуть, эту библиотеку можно найти здесь https://github.com/AleSpero/ExpandableCardView, библиотека просит меня создать новый макет с атрибутом inner_view, я сделал это, мой макет называется transaction_list_expandable_view.xml, и он выглядит так

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                               xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
                                               android:layout_height="wrap_content"
                                               xmlns:app="http://schemas.android.com/apk/res-auto"
                                               tools:ignore="ExtraText">
<com.alespero.expandablecardview.ExpandableCardView
        android:id="@+id/transaction"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:title="testt"
        app:inner_view="@layout/transaction_list_inner_view"
        app:expandOnClick="true"
        app:animationDuration="300"
        app:startExpanded="false"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

Теперь возникает проблема, мой пользовательский TransactionAdapter обрабатывает только одну раскладку, которую я назвалaction_list_inner_view, как я могу вместо этого адаптера обрабатывать как внутренние, так и расширяемые представления и получать желаемый результат? (список карточек с соответствующими названиями, который расширяется, чтобы показать остальные детали, принадлежащие им)

Извините за длинный вопрос и код, заранее спасибо за любую помощь.

1 Ответ

1 голос
/ 08 апреля 2019

После проверки кода библиотеки, которую вы используете, я думаю, что вы не должны раздувать внутреннее представление вручную (в вашем адаптере), так как это ответственность ExpandableCardView, вы должны надуть transaction_list_expandable_view.xml в ваш адаптер. Это будет выглядеть так: val view = inflater.inflate(R.layout.transaction_list_expandable_view, p0, false)

Что касается заполнения вашего внутреннего вида, я не уверен, является ли внутренний вид уже раздутым в расширяемом во время создания экземпляра CustomViewHolder. если это так, то переключение внутренних => расширяемых представлений должно помочь.

...