How to Intent an image that loaded from the internet by glide

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 :)

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=161910&siteId=1