![](/img/trans.png)
[英]RecyclerView does not show items in Fragment, but works in Activity
[英]Android Studio RecyclerView does not show items
我的应用程序中有两个回收站视图,它们都连接到数据库但集合不同。 第一个在 MainActivity 中,从第一个集合中获取数据,每个项目都可以单击,然后发送到第二个集合,效果很好,但第二个在另一个 Activity 中,从第二个集合中获取数据,但不显示任何内容。
我测试了第二个回收器视图做这些事情:
这是我的代码:
主要活动.java
public class MainActivity extends AppCompatActivity {
RecyclerView items;
public ArrayList<Item> itemsList;
MyAdapter adapter;
FirebaseFirestore db;
ProgressDialog pD;
Button viewAddedButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewAddedButton = findViewById(R.id.addedBtn);
pD = new ProgressDialog(this);
pD.setCancelable(false);
pD.setMessage("Retrieving Data...");
pD.show();
items = findViewById(R.id.recycle);
items.setHasFixedSize(true);
items.setLayoutManager(new LinearLayoutManager(this));
db = FirebaseFirestore.getInstance();
itemsList = new ArrayList<Item>();
adapter = new MyAdapter(MainActivity.this, itemsList, new MyAdapter.ItemClickListener() {
@Override
public void onItemClick(Item item) {
Intent intent = new Intent(MainActivity.this, ItemView.class);
intent.putExtra("Item", item);
startActivity(intent);
}
});
viewAddedButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ItemsAdded.class);
startActivity(intent);
}
});
items.setAdapter(adapter);
EventChangeListener();
}
private void EventChangeListener() {
db.collection("Foods").orderBy("Type")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
if (error != null){
Toast.makeText(MainActivity.this, "Database Error " + error.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
for (DocumentChange dc : value.getDocumentChanges()){
if(dc.getType() == DocumentChange.Type.ADDED){
itemsList.add(dc.getDocument().toObject(Item.class));
}
if(pD.isShowing()){
pD.dismiss();
}
adapter.notifyDataSetChanged();
}
}
});
}
}
我的适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
ArrayList<Item> list;
private ItemClickListener mItemListener;
public MyAdapter(Context context, ArrayList<Item> list, ItemClickListener itemClickListener )
{
this.context = context;
this.list = list;
this.mItemListener = itemClickListener;
}
@NonNull
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.cardview, parent, false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
Item item = list.get(position);
holder.Name.setText(item.Name);
holder.Type.setText(item.Type);
holder.Slika.setImageResource(R.drawable.ic_launcher_background);
holder.itemView.setOnClickListener(view -> {
mItemListener.onItemClick(list.get(position));
} );
}
@Override
public int getItemCount() {
return list.size();
}
public interface ItemClickListener{
void onItemClick(Item item);
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView Name, Type;
ImageView Slika;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
Name = itemView.findViewById(R.id.Name);
Type = itemView.findViewById(R.id.Type);
Slika = itemView.findViewById(R.id.Photo);
}
}
}
项目添加.java
public class ItemsAdded extends AppCompatActivity {
RecyclerView recycle;
MyAdapter adapter;
public ArrayList<Item> addedItems;
FirebaseFirestore db;
ProgressDialog pD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items_added);
pD = new ProgressDialog(this);
pD.setCancelable(false);
pD.setMessage("Retrieving Data...");
pD.show();
addedItems = new ArrayList<>();
db = FirebaseFirestore.getInstance();
recycle = findViewById(R.id.addedRecycler);
adapter = new MyAdapter(ItemsAdded.this, addedItems, new MyAdapter.ItemClickListener() {
@Override
public void onItemClick(Item item) {
Intent intent = new Intent(ItemsAdded.this, ItemView.class);
intent.putExtra("Item", item);
startActivity(intent);
}
});
recycle.setAdapter(adapter);
EventChangeListener();
}
private void EventChangeListener() {
db.collection("AddedItems")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
if (error != null){
Toast.makeText(ItemsAdded.this, "Database Error " + error.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
for (DocumentChange dc : value.getDocumentChanges()){
if(dc.getType() == DocumentChange.Type.ADDED){
addedItems.add(dc.getDocument().toObject(Item.class));
}
if(pD.isShowing()){
pD.dismiss();
}
adapter.notifyDataSetChanged();
}
}
});
}
}
项目视图.java
TextView Name, Type, kcal, uh, prot;
Button addBtn;
ArrayList<Item> savedItemList = new ArrayList<>();
FirebaseFirestore db;
String NameS, TypeS, kcalS, uhS, protS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_view);
db = FirebaseFirestore.getInstance();
Name = findViewById(R.id.NameView);
Type = findViewById(R.id.TypeView);
kcal = findViewById(R.id.kcal);
uh = findViewById(R.id.uh);
prot = findViewById(R.id.prot);
addBtn = findViewById(R.id.AddBtn);
Item item = (Item) getIntent().getSerializableExtra("Item");
NameS = item.getName();
TypeS = item.getType();
kcalS = item.getKcal();
uhS = item.getKcal();
protS = item.getProtein();
Name.setText(NameS);
Type.setText(TypeS);
kcal.setText(kcalS);
uh.setText(uhS);
prot.setText(protS);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ItemView.this, "ADDED " + NameS + "!", Toast.LENGTH_SHORT).show();
Map<String, Object> itemAdded = new HashMap<>();
itemAdded.put("Name", NameS);
itemAdded.put("Type", TypeS);
itemAdded.put("kcal", kcalS);
itemAdded.put("uh", uhS);
itemAdded.put("prot", protS);
db.collection("AddedItems")
.add(itemAdded)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(ItemView.this, "Added to database", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(ItemView.this, "Database Error " + e, Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
Logcat 不打印任何内容。
我认为这不是数据库错误,因为 Processdialog 只有在获取数据消失后才会消失。
解决了,愚蠢的错误。 只需要添加两行。
public class ItemsAdded extends AppCompatActivity {
RecyclerView recycle;
MyAdapter adapter;
public ArrayList<Item> addedItems;
FirebaseFirestore db;
ProgressDialog pD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items_added);
pD = new ProgressDialog(this);
pD.setCancelable(false);
pD.setMessage("Retrieving Data...");
pD.show();
addedItems = new ArrayList<>();
db = FirebaseFirestore.getInstance();
recycle = findViewById(R.id.addedRecycler);
//added this two lines
recycle.setHasFixedSize(true);
recycle.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(ItemsAdded.this, addedItems, new MyAdapter.ItemClickListener() {
@Override
public void onItemClick(Item item) {
Intent intent = new Intent(ItemsAdded.this, ItemView.class);
intent.putExtra("Item", item);
startActivity(intent);
}
});
recycle.setAdapter(adapter);
EventChangeListener();
}
private void EventChangeListener() {
db.collection("AddedItems").orderBy("Type")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
if (error != null){
Toast.makeText(ItemsAdded.this, "Database Error " + error.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
for (DocumentChange dc : value.getDocumentChanges()){
if(dc.getType() == DocumentChange.Type.ADDED){
addedItems.add(dc.getDocument().toObject(Item.class));
}
if(pD.isShowing()){
pD.dismiss();
}
adapter.notifyDataSetChanged();
}
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.