Java 在片段中使用RecyclerView的应用程序崩溃行中无错误
我在我的应用程序上使用了recyclerView来显示数组项。在我修改它之前,它在“MainActivity.java”中实现时运行良好 我希望我的应用程序有一个“底部导航栏” 但是,当我启动应用程序时,它就崩溃了 这是片段代码:Java 在片段中使用RecyclerView的应用程序崩溃行中无错误,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我在我的应用程序上使用了recyclerView来显示数组项。在我修改它之前,它在“MainActivity.java”中实现时运行良好 我希望我的应用程序有一个“底部导航栏” 但是,当我启动应用程序时,它就崩溃了 这是片段代码: public class HomeFragment extends Fragment { private RecyclerView rvProduk; private ArrayList<Produk> list = new ArrayL
public class HomeFragment extends Fragment {
private RecyclerView rvProduk;
private ArrayList<Produk> list = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
rvProduk = v.findViewById(R.id.rv_produk);
rvProduk.setHasFixedSize(true);
list.addAll(ProdukData.getListData());
showRecyclerView();
return v;
}
private void showRecyclerView(){
rvProduk.setLayoutManager(new LinearLayoutManager(this.getActivity()));
ProdukAdapter produkAdapter = new ProdukAdapter();
rvProduk.setAdapter(produkAdapter);
}
}
和适配器:
public class ProdukAdapter extends RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder> {
private ArrayList<Produk> listProduk;
@NonNull
@Override
public ProdukViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_cardview_produk, viewGroup, false);
return new ProdukViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ProdukViewHolder holder, final int position) {
final Produk produk = listProduk.get(position);
Glide.with(holder.itemView.getContext())
.load(produk.getPhoto())
.apply(new RequestOptions().override(350, 550))
.into(holder.imgPhoto);
holder.tvName.setText(produk.getName());
holder.tvDetail.setText(produk.getDetail());
holder.btnDetail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent moveIntent = new Intent(holder.itemView.getContext(), DetailActivity.class);
moveIntent.putExtra(DetailActivity.PRODUK_NAME, produk.getName());
moveIntent.putExtra(DetailActivity.PRODUK_DETAIL, produk.getDetail());
moveIntent.putExtra("photo", listProduk.get(position).getPhoto());
holder.itemView.getContext().startActivity(moveIntent);
}
});
}
@Override
public int getItemCount() {
return listProduk.size();
}
public class ProdukViewHolder extends RecyclerView.ViewHolder {
ImageView imgPhoto;
TextView tvName, tvDetail;
Button btnBuy, btnDetail;
ProdukViewHolder(View itemView){
super(itemView);
imgPhoto = itemView.findViewById(R.id.img_item_photo);
tvName = itemView.findViewById(R.id.tv_item_name);
tvDetail = itemView.findViewById(R.id.tv_item_detail);
btnBuy = itemView.findViewById(R.id.btn_set_buy);
btnDetail = itemView.findViewById(R.id.btn_set_detail);
}
}
}
公共类ProdukAdapter扩展了RecyclerView.Adapter{
私人ArrayList listProduk;
@非空
@凌驾
public ProdukViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int-viewType){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.item\u cardview\u produk,viewGroup,false);
返回新的ProdukViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(@NonNull final ProdukViewHolder holder,final int position){
最终Produk Produk=listProduk.get(位置);
Glide.with(holder.itemView.getContext())
.load(produk.getPhoto())
.apply(新请求选项().override(350550))
.into(holder.imgPhoto);
holder.tvName.setText(produk.getName());
holder.tvDetail.setText(produk.getDetail());
holder.btnDetail.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent moveIntent=新的Intent(holder.itemView.getContext(),DetailActivity.class);
moveIntent.putExtra(DetailActivity.PRODUK_NAME,PRODUK.getName());
moveIntent.putExtra(DetailActivity.PRODUK_DETAIL,PRODUK.getDetail());
moveIntent.putExtra(“photo”,listProduk.get(position.getPhoto());
holder.itemView.getContext().startActivity(moveIntent);
}
});
}
@凌驾
public int getItemCount(){
返回listProduk.size();
}
公共类ProdukViewHolder扩展了RecyclerView.ViewHolder{
ImageView imgPhoto;
TextView tvName,tvDetail;
按钮btnBuy,btnDetail;
ProdukViewHolder(查看项目视图){
超级(项目视图);
imgPhoto=itemView.findviewbyd(R.id.img\u item\u photo);
tvName=itemView.findViewById(R.id.tv\u item\u name);
tvDetail=itemView.findViewById(R.id.tv\u item\u detail);
btnBuy=itemView.findviewbyd(R.id.btn\u set\u buy);
btnDetail=itemView.findviewbyd(R.id.btn\u set\u detail);
}
}
}
有人能帮我吗?
我仍在android上学习您尚未向ProdukAdapter发送任何数据。您应该在ProdukAdapter中创建一个构造函数并传递列表。我认为您的代码中出现了NullPointerException。顺便说一句,你应该总是与这样的问题分享你的日志 尝试如下更改代码 碎片
private void showRecyclerView(){
rvProduk.setLayoutManager(new LinearLayoutManager(this.getActivity()));
ProdukAdapter produkAdapter = new ProdukAdapter(list);
rvProduk.setAdapter(produkAdapter);
}
适配器
public class ProdukAdapter extends RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder> {
private ArrayList<Produk> listProduk;
public ProdukAdapter(ArrayList<Produk> listProduk)
{
this.listProduk=listProduk
}
................
}
公共类ProdukAdapter扩展了RecyclerView.Adapter{
私人ArrayList listProduk;
公共ProdukAdapter(ArrayList listProduk)
{
this.listProduk=listProduk
}
................
}
请提供完整的问题。啊,对不起,我忘了我已经解决了我的问题,多亏了Shakib,他的方法解决了问题Hanks,它现在可以工作了,但是,我需要单击我的片段来显示我的recyclerview我不知道为什么它没有自动出现在HomeFragments中。你在你的小部件中定义过这样的片段吗?不,我试试看
public class ProdukAdapter extends RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder> {
private ArrayList<Produk> listProduk;
public ProdukAdapter(ArrayList<Produk> listProduk)
{
this.listProduk=listProduk
}
................
}