【问题标题】:Set recycle view item at on click time在 onclick 时设置 recyclerview 项目
【发布时间】:2016-05-01 09:39:33
【问题描述】:

我想显示一个水平列表,显示某些服务(如汽油泵、轮胎)的非活动图像。点击回收视图后,我必须更改非活动图像 使用活动图像。我从服务中获取图像作为 URL,然后下载并设置它。 因此,我认为 here 所述选择器不可能解决此问题

任何帮助都应该感谢。

public class ServicesCategoryadapter extends RecyclerView.Adapter<ServicesCategoryadapter.ViewHolder> {



    public ServicesCategoryadapter(Context context, ArrayList<ServiceCategory> serviceCategoryArrayList, GoogleMap googleMap, GetVendorsService getVendorsService, LatLng latLng, LinearLayout subcategoryLayout, RecyclerView subCategoryRecycle) {
        this.context = context;
        this.serviceCategoryArrayList = serviceCategoryArrayList;
        this.googleMap = googleMap;
        mPrefscmodel = context.getSharedPreferences(MY_PREFS_NAME, 0);
        editor = mPrefscmodel.edit();
        this.getVendorsService = getVendorsService;
        this.latLng = latLng;
        this.subcategoryLayout = subcategoryLayout;
        this.subCategoryRecycle = subCategoryRecycle;
    }


    SharedPreferences mPrefscmodel;
    private static SharedPreferences.Editor editor;

    @Override
    public ServicesCategoryadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.twowayview, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {


        setImageView(viewHolder.vehicleImage, serviceCategoryArrayList.get(i).getInactiveimage(), i);
        viewHolder.serviceCategoryName.setText(serviceCategoryArrayList.get(i).getCategoryName());
        viewHolder.serviceCategoryName.setTextSize(8.0f);

    }

    @Override
    public int getItemCount() {
        return serviceCategoryArrayList.size();
    }

    // inner class to hold a reference to each item of RecyclerView
    public static class ViewHolder extends RecyclerView.ViewHolder {


        public  static  ImageView vehicleImage;
        public TextView serviceCategoryName;
        static   String image="";

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);

            vehicleImage = (ImageView) itemLayoutView.findViewById(R.id.twowayviewimage);
            serviceCategoryName = (TextView) itemLayoutView.findViewById(R.id.serviceCategoryName);
            itemLayoutView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    HomeFragment.isServiceCategory = false;
                    int position = getLayoutPosition();
                    ViewHolder viewHolder = (ViewHolder) v.getTag();


                    String serviceCategoryId = serviceCategoryArrayList.get(position).getCategoriesId();
                    String serviceCategoryName = serviceCategoryArrayList.get(position).getCategoryName();
                    getVendorsService = new GetVendorsService(context, serviceCategoryId, googleMap, serviceCategoryName, latLng);
                    getVendorsService.execute();
                    editor.putString("serviceCategoryId", serviceCategoryId);
                    editor.commit();
                   image=serviceCategoryArrayList.get(position).getImage();

                    ArrayList<ServiceCategory.subServiceCategory> subServiceCategoryObj = new ArrayList<ServiceCategory.subServiceCategory>();
                    subServiceCategoryObj = serviceCategoryArrayList.get(position).getSubServiceCategories();
                    if (subServiceCategoryObj.size() != 0) {
                        subcategoryLayout.setVisibility(View.VISIBLE);
                        SubCategoryAdapter subCategoryAdapter = new SubCategoryAdapter(context, subServiceCategoryObj);
                        subCategoryRecycle.setAdapter(subCategoryAdapter);
                    }
                    else
                        subcategoryLayout.setVisibility(View.GONE);

                }
            });

        }

    }

    public static  void setImageView( ImageView imageView, String url, int i) {

        new ImageDownLoadService(context, imageView).execute(url);


    }
}

使用上面的代码,我可以更改图像,但它会更改未点击的最后一张图像。 在点击之前,我把它拿出来

但点击第二张图片是泵服务后,它会将最后一张图片更改为

【问题讨论】:

  • 为什么有人对这个问题投了反对票。如果没有问题请解决问题
  • 我只想更改点击的图片

标签: android onclick android-recyclerview


【解决方案1】:

在数据旁边存储一些布尔变量,例如isClicked 将指示用户是否单击了图像,创建一个将更新该布尔值的图像侦听器,最后在您的 onBindViewHolder 测试中使用 if/then 语句并根据您的 isClicked 变量为当前数据设置正确的图片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多