Android - 无法使用导航抽屉看到回收视图

时间:2021-05-29 16:36:56

标签: android android-fragments android-recyclerview

我将 Recyclerview 应用于幻灯片片段。

我从 firestore 获取数据并将其放入“SingleDish.class”并放入数组列表“myDataset”中。

我将“myDataset”应用于“myAdapter.java”,但 onCreateViewHolder、onBindViewHolder 未运行。

没有任何错误,但我在幻灯片片段(No Recyclerview)中看不到任何内容

enter image description here

这是我的代码

MainActivity.java

package com.example.demo;

import android.os.Bundle;
import android.view.View;
import android.view.Menu;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
}

SlideshowFragment.java

package com.example.demo.ui.slideshow;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.demo.MyAdapter;
import com.example.demo.R;
import com.example.demo.SingleDish;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;

public class SlideshowFragment extends Fragment {

    private SlideshowViewModel slideshowViewModel;
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    FirebaseFirestore db = FirebaseFirestore.getInstance();

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        slideshowViewModel =
                new ViewModelProvider(this).get(SlideshowViewModel.class);
        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
        slideshowViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
            }
        });

        mRecyclerView = (RecyclerView) root.findViewById(R.id.my_recycler_view);

        mLayoutManager = new LinearLayoutManager(getContext());
        mRecyclerView.setLayoutManager(mLayoutManager);

        ArrayList<SingleDish> myDataset = new ArrayList<>();

        // myDataset.clear();
        db.collection("SDattributes")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                SingleDish sd = document.toObject(SingleDish.class);
                                myDataset.add(sd);
                                Log.d("hwnag", sd.dish+" "+sd.price+" "+sd.average +" "+ sd.usercnt);
                                Log.d("hwnag", myDataset.get(0).dish);
                            }
                        } else
                            Log.d("Log.d", "Failed" + "\n" + task.getException());
                    }
                });

        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);

        return root;
    }
}

MyAdapter.java

package com.example.demo;

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    private ArrayList<SingleDish> mDataset;
    private int imageId;

    public MyAdapter(ArrayList<SingleDish> myDataset) { mDataset = myDataset; }

    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.d("hwang","onCreateViewHolder");
        View v = LayoutInflater.from(parent.getContext()).inflate
                (R.layout.item, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder( MyViewHolder holder, int position) {
        Log.d("hwang","onBindViewHolder");
        switch (mDataset.get(position).dish){
            case("cheesecutlet"):
                imageId = R.drawable.cheesecutlet;
                break;
            case("chickenmayo"):
                imageId = R.drawable.chickenmayo;
                break;
            case("chickenomurice"):
                imageId = R.drawable.chickenomurice;
                break;
            case("coldnoodles"):
                imageId = R.drawable.coldnoodles;
                break;
            case("flyingfishroerice"):
                imageId = R.drawable.flyingfishroerice;
                break;
            case("gochujangbulgogi"):
                imageId = R.drawable.gochujangbulgogi;
                break;
            case("gogumacutlet"):
                imageId = R.drawable.gogumacutlet;
                break;
            case("jjolmen"):
                imageId = R.drawable.jjolmen;
                break;
            case("kimchistew"):
                imageId = R.drawable.kimchistew;
                break;
            case("partynoodle"):
                imageId = R.drawable.partynoodle;
                break;
            case("porkcutlet"):
                imageId = R.drawable.porkcutlet;
                break;
            case("porkcutletwihtalbab"):
                imageId = R.drawable.porkcutletwihtalbab;
                break;
            case("porkcutletwithudon"):
                imageId = R.drawable.porkcutletwithudon;
                break;
            case("raddishbibimbab"):
                imageId = R.drawable.raddishbibimbab;
                break;
            case("ramenwithrice"):
                imageId = R.drawable.ramenwithrice;
                break;
            case("ramenwithtoppingrice"):
                imageId = R.drawable.ramenwithtoppingrice;
                break;
            case("ricetoppedwithpork"):
                imageId = R.drawable.ricetoppedwithpork;
                break;
            case("seafoodsofttofustew"):
                imageId = R.drawable.seafoodsofttofustew;
                break;
            case("spicygrilledchicken"):
                imageId = R.drawable.spicygrilledchicken;
                break;
            case("spicynoodle"):
                imageId = R.drawable.spicynoodle;
                break;
            case("spicyporkbibimbap"):
                imageId = R.drawable.spicyporkbibimbap;
                break;
            case("spicysausagestew"):
                imageId = R.drawable.spicysausagestew;
                break;

        }

        holder.tvRanking.setText(position);
        holder.imageView.setImageResource(imageId);
        holder.ratingBar.setRating(mDataset.get(position).average);
        holder.tvDish.setText(mDataset.get(position).dish);
        holder.tvPrice.setText(mDataset.get(position).price);

        final Context mycontext = holder.itemView.getContext();

        holder.btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                // Toast.makeText(mycontext, mDataset.get(position).title, Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(v.getContext(), ShowDetail.class);

                intent.putExtra("dish", mDataset.get(position).dish);
                intent.putExtra("imageId", imageId);
                intent.putExtra("average", mDataset.get(position).average);
                intent.putExtra("price", mDataset.get(position).price);


                mycontext.startActivity(intent);

            }
        });
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }
}

MyViewHolder.java

package com.example.demo;

import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView tvRanking, tvDish, tvPrice;
    ImageView imageView;
    RatingBar ratingBar;
    Button btn;

    public MyViewHolder(View item) {
        super(item);

        tvRanking = (TextView) item.findViewById(R.id.tvRanking);
        tvDish = (TextView) item.findViewById(R.id.tvDish);
        tvPrice = (TextView) item.findViewById(R.id.tvPrice);
        imageView = (ImageView) item.findViewById(R.id.itemImageview);
        ratingBar = (RatingBar) item.findViewById(R.id.ratingBar);
        btn = (Button) item.findViewById(R.id.itembutton);
    }
}

SingleDish.java

package com.example.demo;

public class SingleDish {
    public float average;
    public int usercnt;
    public String dish;
    public String price;
    public int sum;

    public SingleDish(){}

    public SingleDish(float average, String dish, String price, int sum, int usercnt ) {
        this.average = average;
        this.dish = dish;
        this.price = price;
        this.sum = sum;
        this.usercnt = usercnt;
    }
}

0 个答案:

没有答案
相关问题