posted 4 years ago
I'm doing a project where you click an image then launches the second activity that contains the image, title and description (it changes depending on the image). I have already set the onClickListener but it doesn't work. The project is working fine and I'm not getting an error as I run it but when I'm in the actual project itself, whenever I click the image the app suddenly closes without giving error message. Any idea how to solve this? Thanks
> Main Activity
public class MainActivity extends AppCompatActivity {
RecyclerView mainRecycler;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainRecycler = findViewById(R.id.main_recycler);
mainRecycler();
}
private void mainRecycler() {
mainRecycler.setHasFixedSize(true);
mainRecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
ArrayList<MainHelperClass> mainLocations = new ArrayList<>();
mainLocations.add(new MainHelperClass(R.drawable.image1, "title1", "desc1"));
mainLocations.add(new MainHelperClass(R.drawable.image2, "title2", "desc2"));
mainLocations.add(new MainHelperClass(R.drawable.image3, "title3, "desc3"));
adapter = new MainAdapter(mainLocations, getApplicationContext());
mainRecycler.setAdapter(adapter);
}
}
> Adapter
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
ArrayList<MainHelperClass> mainLocations;
Context context;
public MainAdapter(ArrayList<MainHelperClass> mainLocations, Context context) {
this.mainLocations = mainLocations;
this.context = context;
}
@NonNull
@Override
public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_card_design,parent,false);
MainViewHolder mainViewHolder = new MainViewHolder(view);
return mainViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {
final MainHelperClass mainHelperClass = mainLocations.get(position);
holder.image.setImageResource(mainHelperClass.getImage());
holder.title.setText(mainHelperClass.getTitle());
holder.desc.setText(mainHelperClass.getDescription());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MainDetails.class);
intent.putExtra("image", mainHelperClass.getImage());
intent.putExtra("title", mainHelperClass.getTitle());
intent.putExtra("description", mainHelperClass.getDescription());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mainLocations.size();
}
public static class MainViewHolder extends RecyclerView.ViewHolder{
ImageView image;
TextView title, desc;
public MainViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.main_image);
title = itemView.findViewById(R.id.main_title);
desc = itemView.findViewById(R.id.main_desc);
}
}
}
> Details Activity
public class MainDetails extends AppCompatActivity {
ImageView image;
TextView title, description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_details);
image = (ImageView)findViewById(R.id.main_image_details);
title = (TextView)findViewById(R.id.main_title_details);
description = (TextView)findViewById(R.id.main_desc_details);
image.setImageResource(getIntent().getIntExtra("image", 0));
title.setText(getIntent().getStringExtra("title"));
description.setText(getIntent().getStringExtra("description"));
}
}