java - 如何意图通过滑翔从互联网加载的图像
问题描述
我有一个适配器,可以将数组列表中的数据发送到我的布局。但是,我想从互联网上加载一些图像,所以我使用 glide (com.github.bumptech.glide:glide:4.9.0)。我的问题是我可以将通过滑行加载的这个/这些图像从主要活动加载到另一个活动吗?
列表适配器:
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);
}
}
}
主要活动 :
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);
}
}
另一个将获得意图的活动:
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);
}
}
我希望有人可以提供帮助,因为我对 android 很陌生。谢谢你!
解决方案
在DetailActivity
中,您正在传递照片网址,ImageDrawable
说明imageView
哪个是错误的。将网址传递给Glide
Glide.with(this).load(photo).apply(new RequestOptions().override(55,55))
.into(tvDataPhoto);
获取活动上下文
您可以通过 Adapter 的构造函数传递上下文,如下所示
private ArrayList<Team> listTeam;
private Context context;
public ListTeamAdapter(Context context, ArrayList<Team> list){
this.listTeam = list;
this.context = context;
}
然后在MainActivity
private void showRecyclerList(){
rvTeams.setLayoutManager(new LinearLayoutManager(this));
ListTeamAdapter listTeamAdapter = new ListTeamAdapter(MainActivity.this,list);
rvTeams.setAdapter(listTeamAdapter);
}
现在您可以在全球范围内使用上下文。
干杯:)
推荐阅读
- php - 带有附件的邮件没有通过邮件到达?
- javascript - 从最后一个点(。)之前替换字符串
- python - Cloud Bigtable:当我按列过滤时,我的修改请求是原子的吗?
- sql-server - 从sql server中的字符串获取模式匹配的子字符串
- node.js - NODE_ENV 不是内部或外部命令、可运行程序或批处理文件
- express-gateway - Express-Gateway 中的 Oauth2 密码授予类型
- android - 强制android textview保持单行
- powerbi - 不同表中的 Power BI sumif 函数具有多对多关系
- mysql - 在查询中查询以在 MySQL Select 中通过多个连接获取特定值
- java - EWS(Exchange WebService)API 在 Open JDK 11 以及 Zulu Java 11 中也不起作用