簡體   English   中英

未從 recyclerview 獲取總項目數

[英]Not getting total item count from recyclerview

我想在我的 recyclerview 為空時顯示“沒有即將到來的約會”,並在它不為空時顯示 recyclerview。 我嘗試了各種代碼來檢查我的 recyclerview 是否為空,但沒有一個有效。 這是我的代碼

public class appointments extends Fragment {
private RecyclerView recyclerView;
private DatabaseReference ref;
private ArrayList<BookedUserInfo> arrayList;
private FirebaseRecyclerOptions<BookedUserInfo> options;
private FirebaseAuth mAuth;
private String uid;
private FirebaseRecyclerAdapter<BookedUserInfo, FireBaseViewHolderUpcomingAppointment> adapter;
private String shopname;
private ProgressDialog progressDialog;
private TextView emptyview;
private int x=0;
@Override
public void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    adapter.stopListening();
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View RootView = inflater.inflate(R.layout.appointment_navigation,container,false);


    //find view by ID
    recyclerView = (RecyclerView) RootView.findViewById(R.id.recycleupcomingappointment);
    emptyview = (TextView) RootView.findViewById(R.id.empty_view);



    //Auth instance
    mAuth = FirebaseAuth.getInstance();
    FirebaseUser currentuser = mAuth.getCurrentUser();
    uid = currentuser.getUid();


    //initialize progress dialog
    progressDialog = new ProgressDialog(getActivity());
    progressDialog.setMessage("Loading");
    progressDialog.show();
    //database refrence
    ref = FirebaseDatabase.getInstance().getReference().child("USER").child(uid).child("UpcomingAppointment");
    ref.keepSynced(true);

    //recycler view
    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(llm);


    //array list
    arrayList = new ArrayList<BookedUserInfo>();
    options = new FirebaseRecyclerOptions.Builder<BookedUserInfo>().setQuery(ref,BookedUserInfo.class).build();



    //adapter
    adapter = new FirebaseRecyclerAdapter<BookedUserInfo, FireBaseViewHolderUpcomingAppointment>(options) {

        @Override
        protected void onBindViewHolder(@NonNull final FireBaseViewHolderUpcomingAppointment holder, int position, @NonNull final BookedUserInfo model) {

            final String datedata = model.getDate();
            final String timedata = model.getTime();
            final int bookingiddata = model.getBookingid();

            Date initDate = null;
            try {
                initDate = new SimpleDateFormat("dd-MM-yyyy").parse(datedata);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy");
            final String parsedDate = formatter.format(initDate);
            holder.time.setText(timedata);
            holder.date.setText(parsedDate);
            holder.id.setText(String.valueOf(bookingiddata));

            final String shopuid = model.getShopuid();
            DatabaseReference myRef =FirebaseDatabase.getInstance().getReference().child("SHOP").child(shopuid);
            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    // This method is called once with the initial value and again
                    shopname = dataSnapshot.child("shopname").getValue().toString();
                    holder.name.setText(shopname);
                    progressDialog.dismiss();
                }

                @Override
                public void onCancelled(DatabaseError error) {
                    progressDialog.dismiss();
                    // Failed to read value
                }
            });
            progressDialog.dismiss();
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(getActivity(), AppointmentBill.class);
                    intent.putExtra("bookingid",String.valueOf(bookingiddata));
                    intent.putExtra("timetext",timedata);
                    intent.putExtra("datetext",datedata);
                    intent.putExtra("uidtext",shopuid);
                    intent.putExtra("appointmentinfotext",model.getAppointmentinfo());
                    startActivity(intent);
                }
            });
        }

        @NonNull
        @Override
        public FireBaseViewHolderUpcomingAppointment onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new FireBaseViewHolderUpcomingAppointment(LayoutInflater.from(getActivity()).inflate(R.layout.cardview_appointment,parent,false));
        }
    };
    recyclerView.setAdapter(adapter);

    //check total items
    if(adapter.getItemCount() == 0)
    {
        recyclerView.setVisibility(View.GONE);
        emptyview.setVisibility(View.VISIBLE);
    }
    else
    {
        recyclerView.setVisibility(View.VISIBLE);
        emptyview.setVisibility(View.GONE);
    }

    progressDialog.dismiss();

    return  RootView;
}

XML代碼

 <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/relativelayoutview"
            android:layout_below="@id/upcomingappointments">
            <TextView
                android:id="@+id/empty_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="30dp"
                android:visibility="gone"
                android:background="#E7E7E7"
                android:paddingBottom="30dp"
                android:text="---------No Upcoming Appointments---------"
                android:gravity="center">
            </TextView>
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycleupcomingappointment"
                android:layout_width="match_parent"
                android:background="#E7E7E7"
                android:layout_height="match_parent">
            </androidx.recyclerview.widget.RecyclerView>
        </RelativeLayout>

我正在使用 google firebase(實時數據庫)來獲取約會詳細信息。 請建議我解決此問題。

我也試過這個但失敗了,所以我在我的 firebase 數據庫參考中使用了snapshot.getchilderncount並檢查了 childrencount 是否 =0

為您的 apointment 數據庫引用創建一個value event listener器,並在其中說if(snapshot.getChildrenCount==0) { ///your logic }

嘗試在 onDataChange 回調方法中移動這個邏輯:

//check total items
if(adapter.getItemCount() == 0)
{
    recyclerView.setVisibility(View.GONE);
    emptyview.setVisibility(View.VISIBLE);
}
else
{
    recyclerView.setVisibility(View.VISIBLE);
    emptyview.setVisibility(View.GONE);
}

這是一個示例 recyclerView 應用程序

適配器.java

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
    List<?> list; //i don`t know your model or type date then i write (?)

    public Adapter(List<?> list) {
        this.list = list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.your_layout,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        //you write your code when bind your view hoder
        YourMode model = list.get(position);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            //for get your view or widget your use **itemView.findViewById()**
        }
    }
}

以及獲取項目計數的代碼:

public class MyFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_fragment_layout, container,false);

        Adapter adapter  = Adapter(yourList);
        if (adapter.getItemCount() == 0){

        }else {

        }

       return view; 
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM