Reputation: 26
I used a recyclerView on my app to display array items. Until I changed it, it worked fine when it was implemented in the "MainActivity.java".
I want my app to have a "BottomNavigationBar" But, when i start the app it just crash
This is the fragment code :
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);
}
}
this is the MainActivity :
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemReselectedListener((BottomNavigationView.OnNavigationItemSelectedListener) navListener);
}
private BottomNavigationView.OnNavigationItemReselectedListener navListener =
new BottomNavigationView.OnNavigationItemReselectedListener() {
@Override
public void onNavigationItemReselected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = new HomeFragment();
switch (menuItem.getItemId()) {
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_feed:
selectedFragment = new FeedFragment();
break;
case R.id.nav_profile:
selectedFragment = new ProfileFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit();
}
};
}
and the Adapter :
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);
}
}
}
Can anyone help me with this? i'm still learning on android
Upvotes: 0
Views: 99
Reputation: 621
You haven't sent any data to the ProdukAdapter. You should create a constructor inside ProdukAdapter and pass your list. I think you are getting NullPointerException in your code. Btw, you should always share your log with a question such as these.
Try changing your code as below
Fragment
private void showRecyclerView(){
rvProduk.setLayoutManager(new LinearLayoutManager(this.getActivity()));
ProdukAdapter produkAdapter = new ProdukAdapter(list);
rvProduk.setAdapter(produkAdapter);
}
Adapter
public class ProdukAdapter extends RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder> {
private ArrayList<Produk> listProduk;
public ProdukAdapter(ArrayList<Produk> listProduk)
{
this.listProduk=listProduk
}
................
}
Upvotes: 1