我真的很坚持。当我尝试将适配器连接到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)
}
}
}
将其放入您的活动代码中。
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>(){
}
告诉我如果有任何问题