【发布时间】:2017-09-14 07:04:22
【问题描述】:
在我的应用程序中,我实现了一个 recyclerview 小部件来显示用户图像、姓名和公司名称。我已将文本信息存储到 Realm DB 中,这些信息在启动应用程序后立即显示。但是对于图像加载,我使用的是 Glide 图像库。但问题是只要我不浏览整个recyclerview,单击按钮后图像就不会加载。因此,如果我只看到前 10 行,则单击 recyclerview 后,它会一个接一个地加载第一个图像。然后当我返回其他页面并且如果没有互联网连接时,其他图像不会加载。图像字段为空。有什么方法可以通过 glide 更快地加载图像。
我在适配器类中的代码
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);
}
【问题讨论】:
-
从 url 加载图片需要一些时间,您可以使用 Placeholder 在加载时显示图片
-
试试.override(100, 100)
-
@NileshRathod 我如何在这里使用占位符。使用这个有什么好处吗,对不起,我是android开发的新手
-
@V-rundPuro-hit 我之前尝试过这种方式,但是图像图像质量非常低
-
你为什么使用
Glide.with( holder.itemView.getContext() );两次?
标签: android android-recyclerview android-glide image-loading imageurl