适配器未在recyclerView中显示

问题描述 投票:0回答:1

我真的很坚持。当我尝试将适配器连接到recyclerView时,它什么也没有显示。

这是我编写的代码。HomeFragment.java

    package com.asia.asiapos.ui.home;

    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ProgressBar;
    import android.widget.TextView;

    import androidx.annotation.Nullable;
    import androidx.annotation.NonNull;
    import androidx.fragment.app.Fragment;
    import androidx.lifecycle.LifecycleOwner;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProvider;
    import androidx.lifecycle.ViewModelProviders;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;

    import com.asia.asiapos.Item;
    import com.asia.asiapos.ListItemAdapter;
    import com.asia.asiapos.R;
    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.Task;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.QueryDocumentSnapshot;
    import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;
    private RecyclerView rv_items;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private ArrayList<Item> listItem;
    private ListItemAdapter listItemAdapter;
    private ProgressBar progressBar;

    private ArrayList<Item> list = new ArrayList<>();


    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.fragment_home, container, false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (getActivity() != null) {
            System.out.println("OK");
            homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
        }

        progressBar = (ProgressBar) view.findViewById(R.id.progressBar);

        listItemAdapter = new ListItemAdapter();
        listItemAdapter.notifyDataSetChanged();

        homeViewModel.setItem();
        homeViewModel.getItems().observe(this, getItem);

        rv_items = view.findViewById(R.id.recyclerView);
        rv_items.setLayoutManager(new LinearLayoutManager(getContext()));
        rv_items.setHasFixedSize(true);
        rv_items.setAdapter(listItemAdapter);

        listItemAdapter.notifyDataSetChanged();


    }

    private Observer<ArrayList<Item>> getItem = new Observer<ArrayList<Item>>() {

        @Override
        public void onChanged(ArrayList<Item> items) {
            if (items != null) {
                System.out.println("Ini: " + items);
                listItemAdapter.setData(items);
            }
            showLoading(false);
        }
    };

    private void showLoading(boolean state) {
        if (state) {
            progressBar.setVisibility(View.VISIBLE);
        } else {
            progressBar.setVisibility(View.GONE);
        }
    }


}

这是我的.xml代码。我使用约束布局。并且recyelerview内的列表将是list_item_row.xml

FragmentHome.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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    >

    <View
        android:id="@+id/view"
        android:layout_width="wrap_content"
        android:layout_height="1dp"
        android:layout_marginTop="130dp"
        android:background="#f2f2f2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="42dp"
        android:layout_weight="1"
        android:text="Halo, A"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toStartOf="@+id/profile_image" />

    <com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="253dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginBottom="22dp"
        app:layout_constraintBottom_toBottomOf="@+id/view"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_search_black_24dp"
            android:hint="Cari Nama Barang..." />

    </com.google.android.material.textfield.TextInputLayout>

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/profile_image"
        android:layout_width="58dp"
        android:layout_height="58dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="24dp"
        android:src="@drawable/kevin"
        app:civ_border_color="#FF000000"
        app:civ_border_width="2dp"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="16dp"
        android:background="@drawable/accent_button"
        android:drawableLeft="@drawable/ic_add_white_24dp"
        android:gravity="center"
        android:text="Tambahan Barang Baru"
        android:textColor="#FFFFFF"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="407dp"
        android:layout_height="521dp"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="@+id/recyclerView"
        app:layout_constraintEnd_toEndOf="@+id/recyclerView"
        app:layout_constraintStart_toStartOf="@+id/recyclerView"
        app:layout_constraintTop_toTopOf="@+id/recyclerView" />

</androidx.constraintlayout.widget.ConstraintLayout>

ItemListAdapter.kt

package com.asia.asiapos

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item_row.view.*
import java.util.*

class ListItemAdapter: RecyclerView.Adapter<ListItemAdapter.ListViewHolder>(){

    private val mData = ArrayList<Item>()

    fun setData(items: ArrayList<Item>) {
        mData.clear()
        mData.addAll(items)
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item_row, parent, false)
        return ListViewHolder(view)
    }

    override fun getItemCount(): Int {
        System.out.println("Jumlah " +mData.count())
        return mData.size

    }

    override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
        holder.bind(mData[position])
    }

    inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(item: Item){
            with(itemView){
                tv_item_name.text = item.name
                tv_station_number.text = item.station
            }
        }
    }

}

list_item_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:srcCompat="@tools:sample/avatars"
        android:background="@drawable/box_radius_8dp"/>

    <TextView
        android:id="@+id/tv_item_name"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="8dp"
        android:layout_weight="1"
        android:gravity="center|start"
        android:text="TextView"
        android:textSize="12dp" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="22dp"
        android:layout_weight="0"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Station"
            android:textSize="14dp" />

        <TextView
            android:id="@+id/tv_station_number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="12"
            android:textSize="14dp"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

Item.kt

package com.asia.asiapos

import android.os.Parcel
import android.os.Parcelable

data class Item(
        var name: String? = null,
        var station: String? = null
//        var color
) : Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString())




    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
        parcel.writeString(station)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Item> {
        override fun createFromParcel(parcel: Parcel): Item {
            return Item(parcel)
        }

        override fun newArray(size: Int): Array<Item?> {
            return arrayOfNulls(size)
        }
    }
}
java android xml kotlin
1个回答
0
投票

将其放入您的活动代码中。

listItemAdapter = new ListItemAdapter(arrayListOf());

homeViewModel.setItem();
homeViewModel.getItems().observe(this, getItem);
rv_items = view.findViewById(R.id.recyclerView);
rv_items.setLayoutManager(new LinearLayoutManager(getContext()));
rv_items.setHasFixedSize(true);
rv_items.setAdapter(listItemAdapter);
private Observer<ArrayList<Item>> getItem = new Observer<ArrayList<Item>>() {

        @Override
        public void onChanged(ArrayList<Item> items) {
            if (items != null) {
                System.out.println("Ini: " + items);
                listItemAdapter.mData.addAll(items);
                listItemAdapter.notifyDataSetChanged();
            }
            showLoading(false);
        }
    };

适配器代码

class ListItemAdapter(var mData: ArrayList<Item>): RecyclerView.Adapter<ListItemAdapter.ListViewHolder>(){
}

告诉我如果有任何问题

© www.soinside.com 2019 - 2024. All rights reserved.