我将 Recyclerview 应用于幻灯片片段。
我从 firestore 获取数据并将其放入“SingleDish.class”并放入数组列表“myDataset”中。
我将“myDataset”应用于“myAdapter.java”,但 onCreateViewHolder、onBindViewHolder 未运行。
没有任何错误,但我在幻灯片片段(No Recyclerview)中看不到任何内容
这是我的代码
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;
}
}