繁体   English   中英

Android Studio RecyclerView 不显示项目

[英]Android Studio RecyclerView does not show items

我的应用程序中有两个回收站视图,它们都连接到数据库但集合不同。 第一个在 MainActivity 中,从第一个集合中获取数据,每个项目都可以单击,然后发送到第二个集合,效果很好,但第二个在另一个 Activity 中,从第二个集合中获取数据,但不显示任何内容。

我测试了第二个回收器视图做这些事情:

  1. 将其更改为使用第一个集合
  2. 制作了一个新的适配器
  3. 在项目列表中手动添加项目

这是我的代码:

主要活动.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM