【发布时间】:2017-08-23 13:29:46
【问题描述】:
我正在尝试在片段中使用回收器视图,并正在使用 firebase 从数据库中获取数据。问题是当我设置适配器时,没有调用我的回收器视图方法,例如 onCreateViewHolder、onBindViewHolder、getItemCount。我可以通过在调试器模式下运行应用程序来确认这一点。 我的片段:
public class Ongoing 扩展 Fragment {
RecyclerView recyclerView;
ProjectAdapter adapter;
ArrayList<ProjectModel> project ;
String[] project_name = new String[3];
String[] project_desc = new String[3];
@Nullable
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.project_layout, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.rv_projects);
project = new ArrayList<>();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("projects");
ref.child("ongoing").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int i = 0;
for(DataSnapshot dsp: dataSnapshot.getChildren()){
//System.out.println(dsp.child("name").getValue());
//System.out.println(dsp.child("description").getValue());
//ProjectModel p = new ProjectModel(dsp.child("name").getValue().toString(),dsp.child("description").getValue().toString());
//project.add(i,p);
project_name[i]= dsp.child("name").getValue().toString();
project_desc[i]= dsp.child("description").getValue().toString();
i++;
}
System.out.println(project_name);
System.out.println(project_desc);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
adapter = new ProjectAdapter(project_name, project_desc,getActivity());
recyclerView.setAdapter(adapter);
LinearLayoutManager llm = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(llm);
return v;
}
}
我的 RecyclerView 适配器:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.adg.adgofficial.R;
public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ProjectViewHolder>{
String[] project_name,project_desc;
//ArrayList<ProjectModel> project;
Context context;
public ProjectAdapter( String[] project_name,String[] project_desc ,Context context) {
this.project_name = project_name;
this.project_desc = project_desc;
this.context = context;
}
@Override
public ProjectViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.projects_element,parent,false);
return new ProjectViewHolder(view);
}
@Override
public void onBindViewHolder(ProjectViewHolder holder, int position) {
holder.title.setText(project_name[position]);
holder.desc.setText(project_desc[position]);
}
@Override
public int getItemCount() {
return 3;
}
public static class ProjectViewHolder extends RecyclerView.ViewHolder {
TextView title, desc;
public ProjectViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.proj_element_title);
desc = (TextView) itemView.findViewById(R.id.proj_element_desc);
}
}
}
这个问题困扰了我好几个星期,我似乎找不到解决办法。在此先感谢您的帮助。
【问题讨论】:
-
尝试在
onDataChange()中的 for 循环之后添加adapter.notifyDataSetChanged(); -
koceeng 我试过这样做,但仍然没有帮助。 Recycler 视图仍然是空的。
-
System.out.println(project_name);是否显示任何值? -
是的,它给出了接收到的数据的字符串值。
标签: android firebase firebase-realtime-database android-recyclerview