如何从FIREBASE中将数据检索到回收站视图 [英] how to retrieve data to a recycler view from FIREBASE
问题描述
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_home);
工具栏工具栏=(工具栏)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RecyclerView recyclerView =(RecyclerView)findViewById(R.id.menu_recycler);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayout = new LinearLayoutManager(this);
linearLayout.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayout);
MenuHomeAdapter menuHomeAdapter = new MenuHomeAdapter(this,createList(7));
recyclerView.setAdapter(menuHomeAdapter);
// FireBase
Firebase.setAndroidContext(this);
//获取对我们帖子的引用
Firebase ref = new Firebase(LINK);
//附加一个监听器来读取我们的帖子中的数据参考
ref.addValueEventListener(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot snapshot ){
for(DataSnapshot postSnapshot:snapshot.getChildren()){
Menu post = postSnapshot.getValue(Menu.class);
Toast.makeText(MenuHome.this,post.getSNo )+ - + post.getDishName(),Toast.LENGTH_LONG).show();
}
}
$ b $ @覆盖
public void onCancelled(FirebaseError firebaseError){
System.out.println(The read failed:+ firebaseError.getMessage());
}
});
$ b 如何在回收站视图中显示数据。我尝试了一些方法,是不正确的。吐司的作品,但所有其他选项都是错的。我只是想在回收站的视图显示来自firebase的数据。 解决方案
$ b
- 监听
onDataChange
来自Firebase的调用 - 保留Firebase数据的内部副本
- 通知
RecyclerView
- 在需要时创建视图持有者
- 将Firebase数据中的数据绑定到视图 li>
我能想到的最低限度是:
public static class MenuHomeAdapter extends RecyclerView.Adapter< MenuViewHolder> {
ArrayList< Menu> items = new ArrayList<>();
$ b公共MenuHomeAdapter(Firebase ref){
ref.addValueEventListener(new ValueEventListener(){
public void onDataChange(DataSnapshot snapshot){
items.clear();
for(DataSnapshot postSnapshot:snapshot.getChildren()){
Menu menu = postSnapshot.getValue(Menu.class);
items.add(menu);
}
notifyDataSetChanged();
}
public void onCancelled(FirebaseError firebaseError){
System.out.println(The read failed:+ firebaseError.getMessage()) ;
}
});
}
$ b $ public MenuViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
View view = LayoutInflater.from(parent.getContext())。inflate(android.R.layout。 simple_list_item_1,parent,false);
返回新的MenuViewHolder(view);
}
public void onBindViewHolder(MenuViewHolder holder,int position){
Menu item = items.get(position);
holder.getTitleView()。setText(item.getTitle());
public int getItemCount(){
return items.size();
}
};
要在上下文中查看,请查看 Activity34962254
(以您问题的编号命名),位于此Github资料库 。
你会注意到,这是相当不重要的。而这个实现工作,这是相当不理想的。例如:当单个项目被更改/添加/删除时,整个列表被重建。这是一个糟糕的表现。\\ b
$ b
除非你有特定的需求,你可能更好 FirebaseRecyclerAdapter 来使用-android#using-firebaseui-to-populate-a-recyclerviewrel =nofollow noreferrer>。要全面了解所提供的功能,我建议您使用 codelab构建一个聊天应用程序FirebaseUI
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.menu_recycler);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayout = new LinearLayoutManager(this);
linearLayout.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayout);
MenuHomeAdapter menuHomeAdapter = new MenuHomeAdapter(this, createList(7));
recyclerView.setAdapter(menuHomeAdapter);
//FireBase
Firebase.setAndroidContext(this);
// Get a reference to our posts
Firebase ref = new Firebase("LINK");
// Attach an listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Menu post = postSnapshot.getValue(Menu.class);
Toast.makeText(MenuHome.this, post.getSNo() + "-" + post.getDishName(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
how to display the data in the recycler view.I tried some methods but it was not proper.the Toast works but all other option are wrong.I just want to display the data from firebase in a recycler view.
As helldawg commented, you'll need to create your own adapter that:
- listens to
onDataChange
calls from Firebase - keeps an internal copy of the data from Firebase
- informs the
RecyclerView
when the data changes - creates view holders when those are needed
- binds data from the Firebase data to the view
The minimum I could come up with quickly is:
public static class MenuHomeAdapter extends RecyclerView.Adapter<MenuViewHolder> {
ArrayList<Menu> items = new ArrayList<>();
public MenuHomeAdapter(Firebase ref) {
ref.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
items.clear();
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Menu menu = postSnapshot.getValue(Menu.class);
items.add(menu);
}
notifyDataSetChanged();
}
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
return new MenuViewHolder(view);
}
public void onBindViewHolder(MenuViewHolder holder, int position) {
Menu item = items.get(position);
holder.getTitleView().setText(item.getTitle());
}
public int getItemCount() {
return items.size();
}
};
To see it in context, look at Activity34962254
(named after the number of your question) on this Github repo.
You'll note that implementing this is fairly non-trivial. And while this implementation works, it is pretty sub-optimal. For example: when a single item is changed/added/deleted, the entire list is rebuilt. That's a recipe for bad performance.
Unless you have specific needs, you're probably better off using the FirebaseRecyclerAdapter
from the FirebaseUI project. To get a full walkthrough of what that offers, I recommend this codelab for building a chat app with FirebaseUI
这篇关于如何从FIREBASE中将数据检索到回收站视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!