【问题标题】:In Recyclerview Image get misplaced while scrolling在 Recyclerview 图像在滚动时放错了位置
【发布时间】:2017-01-18 10:08:11
【问题描述】:

我使用的 customview 包含 ImageView 和两个 TextViews,这是我的 RecyclerView.Adapter 我使用 Picasso 库来显示图像。

 public void onBindViewHolder(final ViewHolder holder, final int position) {
         Picasso.with(context)
            .load(url)
            .placeholder(R.drawable.placeholder)   
            .error(R.drawable.error)   
            .resize(100, 100)                       
            .into(ivProfile);

    holder.tvFirstName.setText(object.getFirstName();
    holder.tvSecondName.setText(object.getSecondName);}


     public int getItemCount()
      {
        return profileListDetails.size();
      }

class ViewHolder extends RecyclerView.ViewHolder {

    public TextView tvFirstName ;
    public TextView tvSecondName ;
    public ImageView ivProfile;

        public ViewHolder(View itemView) {
        super(itemView);
        ivProfile= (ImageView) itemView.findViewById(R.id.ivProfile);
        tvFirstName = (TextView) itemView.findViewById(R.id.tvFirstName );
        tvSecondName = (TextView) itemView.findViewById(R.id.tvSecondName );

    }
}

还有我的 RecyclerView -

      <android.support.v7.widget.RecyclerView               
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:scrollbarAlwaysDrawVerticalTrack="true"
      android:scrollbars="vertical>

</android.support.v7.widget.RecyclerView>

活动类是:-

public class MainActivity extends AppCompatActivity {

private RecyclerView rv_profileList;
private List<ProfilePOJO> profileList;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter recycleAdapter;

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_profile_list);

rv_profileList = (RecyclerView) findViewById(R.id.rv_profileList );
profileList = new ArrayList<>();

  getProfileDetails("");

 }


public void getProfileDetails(String ID) {

    RestAdapter adapter = new RestAdapter.Builder()
            .setEndpoint(Constants.PROFILE_URL)
            .build(); 
         API objGetProfile = adapter.create(API.class);


    objGetProfile.getProfile(
             ID,
                           new Callback<String>() {
                @Override
                public void success(String result, Response response) {
                    try {

                        Gson gson = new Gson();
                        Type listType = new TypeToken<List<ProfilePOJO>>() {
                        }.getType();

                        profileList = (List<ProfilePOJO>) gson.fromJson(result, listType);

                        if (profileList.size() != 0) {

                            recycleAdapter = new ProductListAdapter(productList, MainActivity.this);

                            rv_profileList.setAdapter(recycleAdapter);

                                                    }
                                           } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

                @Override
                public void failure(RetrofitError error) {
                    error.printStackTrace();
                    Toast.makeText(MainActivity .this, "Please check Internet connection !", Toast.LENGTH_LONG).show();

                }

            }
    );

}
}

问题是当我试图滚动 recyclerview 然后图像发生变化时, 谁能帮帮我。

【问题讨论】:

  • 你说的“改变”是什么意思,他们的立场在改变?是否显示不同的图像?还是在闪烁?
  • 图像放错位置意味着第 1 位图像进入第 3 位或第 4 位图像显示到第 6 位,就像任何组合一样...
  • 位置是不断变化的,但是当点击特定位置查看详细信息时,会显示正确的图像。
  • 在您的.into(ivProfile) 调用中,ivProfile 是成员变量还是拼写错误?
  • 如果不是拼写错误,请将其更改为.into(holder.ivProfile)

标签: android android-layout android-studio android-recyclerview


【解决方案1】:

谢谢大家的回复... 终于解决了这个问题

public void onBindViewHolder(final ViewHolder holder, final int position) {
     Picasso.with(context)
        .load(url)
        .placeholder(R.drawable.placeholder)   
        .error(R.drawable.error)   
        .resize(100, 100)                       
        .into(ivProfile);

我在上面的代码中做了一些小改动... 在上面的代码中,ivProfile 声明为全局,因此无法与 ViewHolder 引用链接。所以我把它改成下面...

public void onBindViewHolder(final ViewHolder holder, final int position) {
     Picasso.with(context)
        .load(url)
        .placeholder(R.drawable.placeholder)   
        .error(R.drawable.error)   
        .resize(100, 100)                       
        .into(holder.ivProfile);

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2016-10-04
    • 2015-10-08
    相关资源
    最近更新 更多