未连接适配器;使用Firebase数据库跳过片段中的布局 [英] No adapter attached; skipping layout in fragment using firebase database
本文介绍了未连接适配器;使用Firebase数据库跳过片段中的布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
资源:
片段文件
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class TempFragment extends Fragment {
private RecyclerView rcv;
private ArrayList<TempModel> tempData;
private DatabaseReference databaseReference;
public TempFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_temp, container, false);
rcv = (RecyclerView) v.findViewById(R.id.recycle_template);
rcv.setLayoutManager(new GridLayoutManager(getContext(),3));
rcv.setHasFixedSize(true);
fireAdapter();
return v;
}
public void fireAdapter(){
tempData = new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference().child("images");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
TempModel tempModel = postSnapshot.getValue(TempModel.class);
tempData.add(tempModel);
}
TempAdapter tempAdapter = new TempAdapter(getContext(),tempData);
rcv.setAdapter(tempAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getContext(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}
适配器
public class TempAdapter extends RecyclerView.Adapter<TempAdapter.MyViewHol> {
private Context context;
private ArrayList<TempModel> data ;
public TempAdapter(Context context, ArrayList<TempModel> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public MyViewHol onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view ;
LayoutInflater layoutInflater = LayoutInflater.from(context);
view = layoutInflater.inflate(R.layout.cardview_item,parent,false);
return new MyViewHol(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHol holder, int position) {
holder.textView.setText(data.get(position).getName());
Picasso.get().load(data.get(position).getImageUrl()).fit().centerCrop().into(holder.imageView);
// holder.imageView.setImageResource(data.get(position).getThumbnail());
}
@Override
public int getItemCount() {
return data.size();
}
public static class MyViewHol extends RecyclerView.ViewHolder{
TextView textView ;
ImageView imageView;
public MyViewHol(@NonNull View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.temp_title);
imageView = (ImageView)itemView.findViewById(R.id.temp_img);
}
}
}
模型
public class TempModel {
private String name;
private String imageUrl;
public TempModel(){
}
public TempModel(String name, String imageUrl) {
this.name = name;
this.imageUrl = imageUrl;
}
public String getName() {
return name;
}
public String getImageUrl() {
return imageUrl;
}
public void setName(String name) {
this.name = name;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
我知道我缺少一些东西. 如果有人帮助,那就太好了.
I know there are few things i'm missing on it. It will be great if anyone help on it.
推荐答案
使用调试器检查您是否正在从Firebase数据库中获取数据? 或者尝试在OnCreateview方法中初始化您的适配器,并使用notifydatasetchanged()
Use Debugger to check if you are getting data from firebase database? Or try to Init your Adaptor in OnCreateview method and use notifydatasetchanged()
这篇关于未连接适配器;使用Firebase数据库跳过片段中的布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文