簡體   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