1

所以我正在使用从 ParseQuery 适配器获取数据的 recyclerview 适配器。无论如何,现在的问题是,在每个项目或行中我都有一个按钮。喜欢投票按钮。

每次点击一个按钮,它会自动随机点击其他行的其他按钮,

知道问题是什么吗?

这是我的代码。

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

    private ViewGroup parseParent;
    private Context context;
    public Button voteUp;
    private RVAdapter recyclerAdapter = this;
    private ParseQueryAdapter<ParseObject> parseAdapter;



    public RVAdapter(Context context, ViewGroup parentIn) {
        super();
        this.context = context;


        // performance optimization for recycler view
        setHasStableIds(false);


        parseParent = parentIn;
        parseAdapter = new ParseQueryAdapter<ParseObject>(context, getImagesQueryFactory()) {


            @Override
            public View getItemView(ParseObject object, View v, ViewGroup parent) {
                if (v == null) {
                    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
                }
                super.getItemView(object, v, parent);


                final ParseImageView Image = (ParseImageView) v.findViewById(R.id.list_item_image);
                final ParseFile imageFile = object.getParseFile("img");
                if (imageFile != null) {
                    //Get singleton instance of ImageLoader
                    ImageLoader imageLoader = ImageLoader.getInstance();
                    //Load the image from the url into the ImageView.
                    imageLoader.displayImage(imageFile.getUrl(), audioImage);
                }//end if


                voteUp= (Button) v.findViewById(R.id.like);
                voteUp.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        voteUp.setEnabled(false);
                        voteUp.setText("voted Up");
                    }
                });
                return v;
            }
        };//end parseAdapter


        loadImages();
        parseAdapter.addOnQueryLoadListener(new OnQueryLoadListener());
        parseAdapter.loadObjects();
    } //end of RVAdapter

    private ParseQueryAdapter.QueryFactory<ParseObject> getImagesQueryFactory() {

        return new ParseQueryAdapter.QueryFactory<ParseObject>() {
           //Query details.....
                return query;
            }
        };
    }

    public void loadImages() {
        ParseQuery<ParseObject> query = ParseObject.getQuery();
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> list, com.parse.ParseException e) {
                if (e == null) {
                    notifyDataSetChanged();
                } else {
                    //error
                }

            }
        });
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        parseAdapter.getView(position, holder.itemView, parseParent);

    }

    @Override
    public int getItemCount() {
        return parseAdapter.getCount();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {



        public ViewHolder(View itemView) {

            super(itemView);



            });

        }
    }

    public class OnQueryLoadListener implements ParseQueryAdapter.OnQueryLoadListener<ParseObject> {

        public void onLoading() {

        }

        public void onLoaded(List<ParseObject> objects, Exception e) {
            recyclerAdapter.notifyDataSetChanged();
        }
    }
}
4

1 回答 1

0

从顶部删除 Button 声明并在此处声明:

final Button voteUp = (Button) v.findViewById(R.id.like);

当您在顶部将 Button 声明为全局变量时,它没有为 gridview 或 listview 的每一行正确分配变量。

它需要在此处分配,因此按钮的每次迭代都设置有单独的 onclick 侦听器。

于 2015-09-07T03:23:16.893 回答