java - 当应用程序通过设备运行时,适配器不显示项目
问题描述
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.stylist_fragment, container, false);
bundle=getArguments();
if(bundle!=null){
bookingDetails=(BookingDetails)bundle.getParcelable("bookingDetails");
}
recyclerView = view.findViewById(R.id.stylistRecycler);
try{
date=bookingDetails.getDate();
startTime=bookingDetails.getStartTime();
services=bookingDetails.getServices();
servicesId=bookingDetails.getServicesId();
stylistidArray=bookingDetails.getStylistId();
durationList=bookingDetails.getDuration();
price=bookingDetails.getPrice();
endTimeList=bookingDetails.getEndTime();
}catch (Exception e){
e.printStackTrace();
}
new freeBusy().execute();
return view;
}
private class freeBusy extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
stylistDetailsList = new ArrayList<>();
for(int i=0;i<stylistidArray.size();i++){
FirebaseFirestore db= FirebaseFirestore.getInstance();
db.collection("stylists").document(stylistidArray.get(i)).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
DocumentSnapshot documentSnapshot=task.getResult();
if(documentSnapshot.exists()){
String stylistid=documentSnapshot.getId();
String firstName=documentSnapshot.getString("firstName");
String lastName=documentSnapshot.getString("lastName");
String imageUrl=documentSnapshot.getString("imageUrl");
StylistCollection stylistCollection=new StylistCollection(stylistid,firstName,lastName,imageUrl);
stylistDetailsList.add(stylistCollection);
}
}
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
NewStylistAdapter newStylistAdapter=new NewStylistAdapter(stylistDetailsList);
RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(getContext(), R.drawable.divider));
recyclerView.addItemDecoration(dividerItemDecoration);
recyclerView.setAdapter(newStylistAdapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
newStylistAdapter.notifyDataSetChanged();
}
}
}
// 这是我的xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/darkgrey">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/topbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black">
<ImageView
android:id="@+id/back_Img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_arrow_back_black_24dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_60sdp"
android:textSize="@dimen/_20sdp"
android:textColor="@color/white"
android:fontFamily="@string/roboto_light"
android:text="@string/choose_1_2_services"/>
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.CardView
android:id="@+id/dameklipCard"
android:layout_width="wrap_content"
android:layout_height="@dimen/_150sdp"
android:layout_margin="@dimen/_10sdp"
android:layout_below="@+id/topbar"
app:cardCornerRadius="@dimen/_15sdp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardBackgroundColor="#f5f5ef"
card_view:cardElevation="3dp"
app:cardCornerRadius="@dimen/_15sdp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rounderblue"
android:layout_width="match_parent"
android:layout_height="@dimen/_80sdp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/cardImg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/card_bg"/>
<TextView
android:id="@+id/services"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:fontFamily="sans-serif-light"
android:textStyle="italic"
android:textSize="@dimen/_11sdp"
android:textColor="#EAEAEA"
android:layout_marginTop="@dimen/_16sdp"
android:text="@string/services"/>
<TextView
android:id="@+id/serviceTv"
android:layout_width="@dimen/_149sdp"
android:layout_height="wrap_content"
android:layout_below="@+id/services"
android:fontFamily="@string/roboto_genraltext"
android:layout_marginStart="@dimen/_16sdp"
android:textSize="@dimen/_20sdp"
android:textColor="#EAEAEA"
android:text=""/>
<TextView
android:id="@+id/durationTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/serviceTv"
android:layout_marginStart="@dimen/_16sdp"
android:fontFamily="@string/roboto_genraltext"
android:textSize="@dimen/_11sdp"
android:textColor="#FFFFFF"
android:text=""/>
</RelativeLayout>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/stylistImg"
android:layout_width="@dimen/_90sdp"
android:layout_height="@dimen/_90sdp"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginEnd="@dimen/_30sdp"
android:src="#90eeeded"
android:layout_alignParentEnd="true"
/>
<TextView
android:id="@+id/stylistNameTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/stylistImg"
android:layout_alignParentEnd="true"
android:fontFamily="@string/roboto_bold"
android:textSize="@dimen/_11sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginEnd="@dimen/_40sdp"
android:textColor="@color/black"
android:layout_marginBottom="@dimen/_10sdp"
android:text="" />
<TextView
android:id="@+id/timeTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/rounderblue"
android:fontFamily="@string/roboto_light"
android:layout_marginStart="@dimen/_16sdp"
android:textColor="#383838"
android:layout_marginTop="@dimen/_5sdp"
android:text="@string/your_appointment_date_time"
android:textSize="@dimen/_11sdp"
android:textStyle="italic" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/timeTV"
android:layout_marginStart="@dimen/_16sdp"
android:fontFamily="@string/roboto_medium"
android:text="Kl."
android:textSize="@dimen/_18sdp"/>
<TextView
android:id="@+id/timeTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/timeTV"
android:layout_marginStart="@dimen/_5sdp"
android:fontFamily="@string/roboto_medium"
android:layout_toEndOf="@+id/time"
android:text=""
android:textSize="@dimen/_18sdp"/>
<TextView
android:id="@+id/dateTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/timeTv"
android:layout_marginStart="@dimen/_16sdp"
android:fontFamily="@string/roboto_medium"
android:text=""
android:textSize="@dimen/_18sdp"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</android.support.v7.widget.CardView>
<TextView
android:id="@+id/chooseTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/choose_one"
android:layout_marginStart="@dimen/_25sdp"
android:layout_below="@+id/dameklipCard"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/stylistRecycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/chooseTv"
/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
在这里,我从 firebase 获取详细信息并填充 recyclerview 中的所有值。问题是当我调试应用程序时,值填充在 recyclerview 中,但是当我运行应用程序时,值没有填充在 recyclerview 中,我也尝试在 logcat 中打印值.这些值在 logcat 中可用
解决方案
问题在于 asyncTask,asyncTask 在从 firebase 加载项目之前完成。你甚至不需要 asyncTask。试试下面
NewStylistAdapter newStylistAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.stylist_fragment, container, false);
bundle=getArguments();
if(bundle!=null){
bookingDetails=(BookingDetails)bundle.getParcelable("bookingDetails");
}
recyclerView = view.findViewById(R.id.stylistRecycler);
try{
date=bookingDetails.getDate();
startTime=bookingDetails.getStartTime();
services=bookingDetails.getServices();
servicesId=bookingDetails.getServicesId();
stylistidArray=bookingDetails.getStylistId();
durationList=bookingDetails.getDuration();
price=bookingDetails.getPrice();
endTimeList=bookingDetails.getEndTime();
}catch (Exception e){
e.printStackTrace();
}
loadData();
return view;
}
private void loadData(){
setupAdapter();
for(int i=0;i<stylistidArray.size();i++){
FirebaseFirestore db= FirebaseFirestore.getInstance();
db.collection("stylists").document(stylistidArray.get(i)).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
DocumentSnapshot documentSnapshot=task.getResult();
if(documentSnapshot.exists()){
String stylistid=documentSnapshot.getId();
String firstName=documentSnapshot.getString("firstName");
String lastName=documentSnapshot.getString("lastName");
String imageUrl=documentSnapshot.getString("imageUrl");
StylistCollection stylistCollection=new StylistCollection(stylistid,firstName,lastName,imageUrl);
stylistDetailsList.add(stylistCollection);
newStylistAdapter.notifyDataSetChanged();
}
}
}
});
}
}
private void setupAdapter(){
stylistDetailsList = new ArrayList<>();
newStylistAdapter = new NewStylistAdapter(stylistDetailsList);
RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(getContext(), R.drawable.divider));
recyclerView.addItemDecoration(dividerItemDecoration);
recyclerView.setAdapter(newStylistAdapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
}
推荐阅读
- python - Pandas:在最后一次出现时拆分字符串
- ios - Swift 中的协议是引用类型还是值类型?
- javascript - 使用 HEX 设置背景颜色
- javascript - 单击按钮时如何模糊模态背景
- json - 在 Swift 4 中解析 JSON 的最简单方法是什么?
- java-8 - 获取一组列表、找到它们的共同元素并使用 Java 8 流对结果进行排序的有效方法
- ios - iOS AppIcon 问题
- javascript - 主循环函数不运行嵌套函数
- ruby-on-rails - 将数据库结果分成 4 组
- php - Nginx 服务器无法提供 angular-cli /dist 文件夹