Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在片段中使用RecyclerView的应用程序崩溃行中无错误_Java_Android_Android Fragments_Android Recyclerview - Fatal编程技术网

Java 在片段中使用RecyclerView的应用程序崩溃行中无错误

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

我在我的应用程序上使用了recyclerView来显示数组项。在我修改它之前,它在“MainActivity.java”中实现时运行良好

我希望我的应用程序有一个“底部导航栏” 但是,当我启动应用程序时,它就崩溃了

这是片段代码:

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
}

................

}