Glide Imgae加载需要花费太多时间在recyclerview android
问题描述:
在我的应用程序中,我已经实现了一个recyclerview小部件来显示userimage,名称和公司名称。我已经将文本信息存储到Realm DB中,并且这些信息在启动应用程序后立即显示。但对于图像加载,我正在使用Glide图像库。但问题是,只要点击按钮后图像不加载,只要我不通过整个回收站查看。所以,如果我只看到前10行,点击回收站后,它会一个接一个地加载第一个图像。然后,当我回到其他页面,如果互联网连接不在那里,其他图像不加载。图像字段为空。有没有什么方法可以更快速地下载图像并进行滑动。Glide Imgae加载需要花费太多时间在recyclerview android
我的适配器类代码
public class MyColleaguesAdapter extends RecyclerView.Adapter<MyColleaguesAdapter.ColleagueHolder>{
public static String TAG = MyColleaguesAdapter.class.getSimpleName();
protected RequestManager glideManager; //make glideManager keeping
private List<MyColleagueModel> myColleague;
private Context context;
public interface ColleagueListListener {
}
public MyColleaguesAdapter(List<MyColleagueModel> colleagues,Context context) {
this.context=context;
myColleague = colleagues;
glideManager = Glide.with(context);
}
// create new views (invoked by the layout manager)
@Override
public ColleagueHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.colleage_row,parent,false);
return new ColleagueHolder(view);
}
@Override
public void onBindViewHolder(final ColleagueHolder holder, int position) {
app_preferences = PreferenceManager.getDefaultSharedPreferences(context);
final MyColleagueModel currentColleague = myColleague.get(position);
holder.colleagueName.setText(currentColleague.getName());
holder.companyName.setText(currentColleague.getCompany());
holder.jobTitle.setText(currentColleague.getTitle());
holder.cardView.setCardBackgroundColor(Constant.color);
Glide.with(holder.itemView.getContext())
.load(Constants.HTTP.PHOTO_URL + currentColleague.getMail()
)
.thumbnail(0.5f)
.override(200, 200)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.colleaguePicture);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(context,DetailMyColleague.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("IMAGE_URL",Constants.HTTP.PHOTO_URL + currentColleague.getMail());
context.startActivity(i);
}
});
}
@Override
public int getItemCount() {
return myColleague.size();
}
public class ColleagueHolder extends RecyclerView.ViewHolder{
public CardView cardView;
public ImageView colleaguePicture;
public TextView colleagueName;
public TextView companyName;
public TextView jobTitle;
public ColleagueHolder(View itemView) {
super(itemView);
colleaguePicture= itemView.findViewById(R.id.colleague_picture);
colleagueName= itemView.findViewById(R.id.colleague_name);
companyName= itemView.findViewById(R.id.company_name);
jobTitle= itemView.findViewById(R.id.job_title);
cardView= itemView.findViewById(R.id.cardview_user);
}
}
在主要活动中
private RecyclerView recyclerView;
private MyColleaguesAdapter adapter;
private List<MyColleagueModel> myColleagueList = new ArrayList<>();
private ColleagueController mController;
private ColleagueResApiManager mApiManager;
private Realm colleagueRealm;
private LinearLayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
CookieHandler.setDefault(cookieManager);
colleagueConfigViews();
}
public void colleagueConfigViews() {
recyclerView = this.findViewById(R.id.colleagues_recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MyColleaguesPage.this));
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
colleagueRealm = Realm.getDefaultInstance();
RealmResults<MyColleagueModel> results = colleagueRealm.where(MyColleagueModel.class).findAll();
for (int i = 0; i < results.size(); i++) {
myColleagueList.add(results.get(i));
}
adapter = new MyColleaguesAdapter(myColleagueList,getApplicationContext());
recyclerView.setAdapter(adapter);
}
答
按my above comments滑翔需要时间来从URL加载图像,你可以使用占位符显示图像而载入
Glide.with(holder.itemView.getContext())
.load(Constants.HTTP.PHOTO_URL + currentColleague.getMail())
.thumbnail(0.5f)
.override(200, 200)
.placeholder(R.drawable.ic_placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.colleaguePicture);
答
我不是su但你可以尝试下面。 我在我的应用程序中使用下面的代码。没有速度问题..
public class MyRecyclerAdapter extends RecyclerView.Adapter<ColleagueHolder > {
protected RequestManager glideManager; //make glideManager keeping
protected MyRecyclerAdapter(Context context ....Activity or Fragment) {
mContext = context;
glideManager = Glide.with((Fragment or Activity) object);
}
@Override
public void onBindViewHolder(final ColleagueHolder holder, int position) {
holder.colleagueName.setText(currentColleague.getName());
holder.companyName.setText(currentColleague.getCompany());
holder.jobTitle.setText(currentColleague.getTitle());
holder.colleaguePicture.setImageResource(R.drawable.profile_image);
glideManager
.load(Constants.HTTP.PHOTO_URL + currentColleague.getMail())
.placeholder(R.drawable.myholder)
.fitCenter()
.override(200, 200)
.into(holder.colleaguePicture);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(context,DetailMyColleague.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("IMAGE_URL",Constants.HTTP.PHOTO_URL + currentColleague.getMail());
.....
context.startActivity(i);
}
});
}
}
它需要一定的时间来从URL加载图像,你可以使用** **占位符显示图像而载入 –
尝试.override(100,100) –
@NileshRathod我怎样才能在这里使用占位符。有什么好处,使用这个,对不起,我在Android的发展新 – tamrezh21