Raden Kriting :
I have an adapter that send data in array list to my layout. however, there are some images that i want to load from the internet, so im using glide (com.github.bumptech.glide:glide:4.9.0). My problem is can I intent this/these image(s) that loaded by glide from main activity to another activity?
LIST ADAPTER :
public class ListTeamAdapter extends RecyclerView.Adapter<ListTeamAdapter.ListViewHolder> {
private ArrayList<Team> listTeam;
public ListTeamAdapter(ArrayList<Team> list){
this.listTeam = list;
}
@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_team, parent, false);
return new ListViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ListViewHolder holder, int position) {
final Team team = listTeam.get(position);
final Context context = holder.itemView.getContext();
Glide.with(context).load(team.getPhoto()).apply(new RequestOptions().override(55,55))
.into(holder.imgPhoto);
holder.tvName.setText(team.getName());
holder.tvDesc.setText(team.getDesc());
holder.btnList.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Toast.makeText(holder.itemView.getContext(),
listTeam.get(holder.getAdapterPosition()).getName(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("extra_name", team.getName());
intent.putExtra("extra_desc", team.getDesc());
intent.putExtra("extra_history", team.getHistory());
intent.putExtra("extra_photo", team.getPhoto());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return listTeam.size();
}
class ListViewHolder extends RecyclerView.ViewHolder {
ImageView imgPhoto;
TextView tvName, tvDesc;
RelativeLayout btnList;
ListViewHolder(@NonNull View itemView) {
super(itemView);
btnList = itemView.findViewById(R.id.btn_item_list);
imgPhoto = itemView.findViewById(R.id.img_item_photo);
tvName = itemView.findViewById(R.id.tv_item_name);
tvDesc = itemView.findViewById(R.id.tv_item_desc);
}
}
}
MAIN ACTIVITY :
public class MainActivity extends AppCompatActivity {
private RecyclerView rvTeams;
private ArrayList<Team> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvTeams = findViewById(R.id.rv_teams);
rvTeams.setHasFixedSize(true);
list.addAll(TeamsData.getListData());
showRecyclerList();
}
private void showRecyclerList(){
rvTeams.setLayoutManager(new LinearLayoutManager(this));
ListTeamAdapter listTeamAdapter = new ListTeamAdapter(list);
rvTeams.setAdapter(listTeamAdapter);
}
}
ANOTHER ACTIVITY THAT WILL GET INTENT :
public class DetailActivity extends AppCompatActivity {
public static final String EXTRA_NAME = "extra_name";
public static final String EXTRA_DESC = "extra_desc";
public static final String EXTRA_HISTORY = "extra_history";
public static final String EXTRA_PHOTO = "extra_photo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
TextView tvDataName = findViewById(R.id.tv_data_name);
TextView tvDataDesc = findViewById(R.id.tv_data_desc);
TextView tvDataHistory = findViewById(R.id.tv_data_history);
ImageView tvDataPhoto = findViewById(R.id.tv_data_photo);
String name = getIntent().getStringExtra(EXTRA_NAME);
String desc = getIntent().getStringExtra(EXTRA_DESC);
String history = getIntent().getStringExtra(EXTRA_HISTORY);
String photo = getIntent().getStringExtra(EXTRA_PHOTO);
tvDataName.setText(name);
tvDataDesc.setText(desc);
tvDataHistory.setText(history);
tvDataPhoto.setImageDrawable(photo);
}
}
I hope someone can help, since Im very new to android. thank you!
Ali Ahsan :
In DetailActivity
, you are passing photo url as ImageDrawable
to imageView
which is wrong. Pass the url to Glide
Glide.with(this).load(photo).apply(new RequestOptions().override(55,55))
.into(tvDataPhoto);
To get the activity context
You can pass the context through Adapter's constructor as follows
private ArrayList<Team> listTeam;
private Context context;
public ListTeamAdapter(Context context, ArrayList<Team> list){
this.listTeam = list;
this.context = context;
}
Then in MainActivity
private void showRecyclerList(){
rvTeams.setLayoutManager(new LinearLayoutManager(this));
ListTeamAdapter listTeamAdapter = new ListTeamAdapter(MainActivity.this,list);
rvTeams.setAdapter(listTeamAdapter);
}
Now context is globally available for you to use.
Cheers :)