-1

在我的应用程序中,我已经实现了一个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); 
} 
+0

它需要一定的时间来从URL加载图像,你可以使用** **占位符显示图像而载入 –

+0

尝试.override(100,100) –

+0

@NileshRathod我怎样才能在这里使用占位符。有什么好处,使用这个,对不起,我在Android的发展新 – tamrezh21

回答

0

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); 
+0

如何在drawable文件夹中声明R.drawable.ic_placeholder – tamrezh21

+0

@ tamrezh21只需在** res/drawable **文件夹中添加想要显示的示例图像,而不是通过** R.id.yourImageName ** –

+0

未解决问题。仍然有相同的问题 – tamrezh21

0

我不是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); 
    } 
}); 
    } 
} 
+0

我在哪里可以写主要活动中的RequestManager和MyRecyclerAdapater方法。你能解释更多 – tamrezh21

+0

我已经根据你的更新了我的代码,我在那里有活动。你能否请检查并告诉我,如何在主要活动中调用适配器,还有什么我应该做的,对不起,我很新,我正在开发 – tamrezh21

+0

我看到了你的更新源代码。我不认为使用recyclerView适配器没有问题。所以我想要你检查1.数据加载时间2.使数据变小(如果数据行是2000,使数据20)如果数据加载是问题,你必须使你的加载数据异步(如使用线程或AsyncTask或relam异步数据加载) –

相关问题