Recyclerview仅显示第一个值

时间:2018-08-07 00:05:06

标签: android json android-recyclerview kotlin

我的gson解析出现问题。我有一个嵌套的gson,我想在属性下获取“名称”的值。问题是我的recyclerview仅显示第一个值(即帐单1),而不显示帐单2或帐单3。这是我的代码

// MainActivity.kt
    recycler_view.layoutManager = LinearLayoutManager(requireContext())
    recycler_view.addItemDecoration(LineItemDecorator(requireContext()))
    val bill = GsonBuilder().create().fromJson(jsonString, Bills::class.java)
            val nameList: List<Bill> = Arrays.asList(bill)
            val adapter = BillsRecyclerAdapter(nameList)
            recycler_view.adapter = adapter
            adapter.notifyDataSetChanged()

// Bills.kt
    data class Bills(
        val data: ArrayList<Data>,
        val meta: Meta,
        val links: Links
    )

// BillsRecyclerAdapter.kt
    class BillsRecyclerAdapter(private val items: List<Bill>):
            RecyclerView.Adapter<BillsRecyclerAdapter.BillsHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BillsHolder {
            return BillsHolder(parent.inflate(R.layout.bills_list_item))
        }

        override fun onBindViewHolder(holder: BillsHolder, position: Int) {
            holder.billName.text = items[position].data[position].attributes.name       
        }


        override fun getItemCount() = items.size

        class BillsHolder(view: View): RecyclerView.ViewHolder(view) {
            val billName: TextView = view.billName
            val billAmount: TextView = view.billAmount
        }
    }

<!-- recyclerview.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_marginTop="@dimen/materialize_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

<!-- bill_list_item.xml-->
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/billName"
        android:textSize="20sp"
        android:layout_marginStart="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"/>

    <TextView
        android:id="@+id/billAmount"
        android:textSize="20sp"
        android:layout_marginEnd="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

这是我的json字符串。 https://pastebin.com/iEqhmB35

感谢提供的任何帮助

1 个答案:

答案 0 :(得分:0)

检查以下内容

  1. 检查您的items.size是否真的不为零,
  2. 还请检查您的bills_list_item.xml尝试将根父母的身高设置为wrap_content
  3. 还请检查您的recyclerview

    recyclerView.setHasFixedSize(true);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    
  4. 重要的是布局管理器

如果没有帮助,可以共享Bills.java类,则JSON原始数据的序列化可能有问题。

希望这会有所帮助。 干杯