【问题标题】:RecyclerView Item data stored in databaseRecyclerView 存储在数据库中的项目数据
【发布时间】:2020-05-05 18:15:22
【问题描述】:

RecyclerView 在项目中使用。卡片视图使用 Imageview、ImageButton、TextView。当用户单击 ImageView 存储在 objectbox 数据库中的图像链接时。两个图像按钮显示喜欢和不喜欢。当用户点击喜欢或不喜欢的图像按钮时存储喜欢和不喜欢的数据库。

如何通过不同的点击监听器在数据库中存储图片和点赞。

public class ThumbnailAdapter extends RecyclerView.Adapter<ThumbnailAdapter.MyViewHolder>{

    private Context mContext;
    private List<Thumbnail> albumList;
    private List<Giphy> giphyList;

    private BoxStore boxStore;
    private Box<Giphy> box;

    public class MyViewHolder extends RecyclerView.ViewHolder {
       // public TextView title, count;

        @BindView(R.id.imgThumbnail)
        public ImageView imageView;

        @BindView(R.id.imgButtonThumbUp)
        public ImageButton imageButtonUP;

        @BindView(R.id.imgButtonThumbDown)
        public ImageButton imageButtonDown;

        @BindView(R.id.tvThumbUpCount)
        public TextView tvUpCount;

        @BindView(R.id.tvThumbDownCount)
        public TextView tvCountDown;

        int countUP = 0;
        int countDown = 0;

        String url;
        int id = 0;
        int thumbUp,thumbDown;

        public MyViewHolder(View view) {
            super(view);
            mContext = view.getContext();
            //imageView = (ImageView) view.findViewById(R.id.imgThumbnail);

            ButterKnife.bind(this,view);




            int idCount = id++;

            giphyList = new ArrayList<>();


            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // String Title = title.getText().toString();

                    Thumbnail list = albumList.get(getAdapterPosition());

                    url = list.getVideoUrl();
                    giphyList.add(new Giphy(0,url,thumbUp,thumbDown));
                    Intent intent = new Intent(mContext,ExoPlayer.class);
                    intent.putExtra("url",list.getVideoUrl());


                    mContext.startActivity(intent);


                }
            });

            imageButtonUP.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                   thumbUp = countUP++;

                    //box.put(countUP);

                    tvUpCount.setText(""+countUP);
                }
            });

            imageButtonDown.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    thumbDown = countDown++;

                   // box.put(countDown);

                    tvCountDown.setText(""+countDown);
                }
            });


            addData(new Giphy(0,url,thumbUp,thumbDown));


        }



    }

    public ThumbnailAdapter(Context mContext, List<Thumbnail> albumList) {
        this.mContext = mContext;
        this.albumList = albumList;
//        this.giphyList = giphyList;


        boxStore = ((ObjectBox)mContext.getApplicationContext()).getBoxStore();
        box = boxStore.boxFor(Giphy.class);

    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_list_item_album, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {


        Thumbnail album = albumList.get(position);



        Glide.with(mContext)
                .asGif()
                .load(album.getGif())
                .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))


                .into(holder.imageView);


    }

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

   public void addData(Giphy giphy){
        box.put(giphy);
    }

【问题讨论】:

  • 请阅读 SQLite 数据库文档
  • 未使用 Sqlite 数据集。使用过的对象框。
  • 我的问题是 Imageview 和 imagebutton clicklistner 事件如何获取存储数据库的数据

标签: android database android-recyclerview objectbox


【解决方案1】:

在onBindViewHolder中,设置位置为ImageButton的标签:

holder.imageButtonUp.setTag(position);
holder.imageButtonDown.setTag(position);

然后在你的ImageButton的onClickListener中,你可以得到位置:

int position = (Integer)view.getTag();
Thumbnail album = albumList.get(position);

然后做你想做的事。

但是由于你使用的是 Glide,而 Glide 使用的是 ImageView 的标签,所以你应该通知 Glide 使用另一个标签。看到这个:

Error "You must not call setTag() on a view Glide is targeting" when use Glide

【讨论】:

  • 不同的onclickListner Imagebutton,imageview 获取数据并传入 addData(new Giphy(0,url,thumbUp,thumbDown));
猜你喜欢
  • 2018-10-23
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多