首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在OnBindViewHolder中单击listener

在OnBindViewHolder中单击listener
EN

Stack Overflow用户
提问于 2018-06-06 04:09:30
回答 2查看 338关注 0票数 0

我有以下代码,用于我正在开发的android应用程序的recyclerview适配器:

代码语言:javascript
复制
 @Override
public void onBindViewHolder(final FeedViewHolder contactViewHolder, final int i) {

    final FeedInfo ci = feedInfoList.get(i);

    //Set the text of the feed with your data
    contactViewHolder.feedText.setText(ci.getFeed());
    contactViewHolder.surNameText.setText(ci.getSurName());
    contactViewHolder.nameText.setText(ci.getFirstName());
    contactViewHolder.feedDate.setText(ci.getDate());
    contactViewHolder.numberOfGoingText.setText(ci.getNumber_of_going());
    contactViewHolder.numberOfInterestedText.setText(ci.getNumber_of_interested());

    //seteaza fotografia de profil in postare
    new ProfilePictureDownloadImage(contactViewHolder.profilePicture).execute(ci.getProfileImageURL());

    ImageButton interestedButton = contactViewHolder.interestedButton;
    interestedButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = i;
            FeedInfo fi = feedInfoList.get(position);
            int displayedNumberOfInterested = Integer.parseInt(ci.getNumber_of_interested()) + 1;
            contactViewHolder.numberOfInterestedText.setText(Integer.toString(displayedNumberOfInterested));
            System.out.println("emilutzy interested from within" + fi.getPostID());
            contactViewHolder.surNameText.setText("kk");
        }
    });
}

问题出在单击监听程序。理论上,我按下的按钮应该会递增它旁边的数字。但是,由于我必须将onBindViewHolder的参数声明为final,所以只有第一次单击才有效,其余的单击都不会更改数字的值。我刚接触Android,所以你能帮我找到一个更好的解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 04:26:40

您可以在RecyclerViewViewHolder中使用一个名为getAdapterPosition()的很好的方法。

不是在onBindViewHolder中设置单击侦听器,而是在ViewHolder的构造函数中设置它,如下所示:

代码语言:javascript
复制
public class FeedViewHolder extends RecyclerView.ViewHolder {
    private TextView feedText;
    private TextView surNameText;
    private Button interestedButton;
    // ... the rest of your viewholder elements

    public FeedViewHolder(View itemView) {
        super(itemView);

        feedtext = itemView.findViewById(R.id.feedtext);
        // ... find your other views

        interestedButton.setOnClickListener(new View.OnClickListener() {
            final FeedInfo fi = feedInfoList.get(getAdapterPosition());
            int numInterested = Integer.parseInt(ci.getNumber_of_interested()) + 1;

            // setting the views here might work, 
            // but you will find that they reset themselves
            // after you scroll up and down (views get recycled).

            // find a way to update feedInfoList, 
            // I like to use EventBus to send an event to the
            // host activity/fragment like so:
            EventBus.getDefault().post(
                new UpdateFeedInfoListEvent(getAdapterPosition(), numInterested));

            // in your host activity/fragment, 
            // update the list and call 
            // notifyDatasetChanged/notifyDataUpdated() 
            //on this RecyclerView adapter accordingly
        });
    }
}

不要将你在onBindViewHolder中的位置设置为final (Android Studio会警告你为什么)。

票数 0
EN

Stack Overflow用户

发布于 2018-06-06 04:18:13

我不确定对象FeedInfo是什么样子的,但您也可以使用一个名为increaseNumberOfInterested()的方法,该方法将Number_of_interested的值增加1,并在循环视图回收单元格时持久化在对象中。它就像下面这样

代码语言:javascript
复制
 @Override
public void onBindViewHolder(final FeedViewHolder contactViewHolder, final int i) {

final FeedInfo ci = feedInfoList.get(i);

//Set the text of the feed with your data
contactViewHolder.numberOfInterestedText.setText(ci.getNumber_of_interested());


contactViewHolder.interestedButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        //Increase the number of interested in the object, so it can be persisted when cell is reclycled
        ci.setNumberOfInterested(ci.getNumber_of_interested()) + 1);

        //Get new value and display 
  contactViewHolder.numberOfInterestedText.setText(Integer.toString(ci.getNumber_of_interested()));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档