【问题标题】:Android Studio RecyclerView does not show itemsAndroid Studio RecyclerView 不显示项目
【发布时间】:2021-10-31 18:17:41
【问题描述】:

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

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

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

这是我的代码:

主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();

                        }


                    }
                });

    }
}

MyAdapter.java

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);
                }
        }
}

ItemsAdded.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();

                        }


                    }
                });

    }

}

Items View.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 才会消失。

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    解决了,愚蠢的错误。 只需要添加两行。

    
    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();
    
                            }
    
    
                        }
                    });
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多