如何在每个项目的列表视图中实现简单的类似按钮

Posted

技术标签:

【中文标题】如何在每个项目的列表视图中实现简单的类似按钮【英文标题】:how to implement simple like button in listview of each item 【发布时间】:2014-05-22 13:41:24 【问题描述】:

我的列表视图项中有某些条目。那里我有一个简单的“喜欢按钮”(不是 facebook 喜欢按钮)。可以看到上面提到的 SCREENSHOT;供参考。 我点击喜欢按钮的那一刻;我希望更改点赞按钮的颜色,并且当我再次登录时,点赞按钮的颜色应该保持不变(更改为点赞)。

此外,所有条目都必须使用 json 使用 cust_id、bus_id、Offer_id 填写到数据库中;我非常了解。

当我再次单击相同的按钮(如按钮)时,其颜色已更改。它必须改回默认颜色,并且必须从数据库中删除数据。

我该怎么做...? 1.如何获取点击按钮的价值。 2.如何将更改后的颜色恢复为默认值;再次单击按钮后。

请给我建议...

这是按钮代码

holder.b1.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                if (clicked) 
                    holder.b1.setBackgroundResource(R.drawable.like_icon_hover);
                 else 
                    holder.b1.setBackgroundResource(R.drawable.like_icon);
                
                clicked = true;
            
        );

【问题讨论】:

看我的回答。如果它不起作用,请告诉我 【参考方案1】:

您需要为按钮添加一个监听器,使用 ValueAnimator 可以更改按钮颜色并在您再次单击时将其反转。

这是实现您的方案的一种简单且最佳的方法。像这样在列表项中为按钮添加 onClick 侦听器。我已经解释了每一行..

    // set a default background color to the button
    placeHolder.likeButton.setBackgroundColor(Color.RED);
    placeHolder.likeButton.setOnClickListener(new View.OnClickListener() 
        ValueAnimator buttonColorAnim = null; // to hold the button animator

        @Override
        public void onClick(View v) 
            // first time this will be null
            if(buttonColorAnim != null)
                // reverse the color
                buttonColorAnim.reverse();
                // reset for next time click
                buttonColorAnim = null;
                // add your code here to remove from database
            
            else 
                final Button button = (Button) v;
                // create a color value animator
                buttonColorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), Color.RED, Color.BLUE);
                // add a update listener for the animator.
                buttonColorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
                    @Override
                    public void onAnimationUpdate(ValueAnimator animator) 
                        // set the background color
                        button.setBackgroundColor((Integer) animator.getAnimatedValue());
                    
                );
                // you can also set a delay before start
                //buttonColorAnim.setStartDelay(2000); // 2 seconds
                // start the animator..
                buttonColorAnim.start();
                // add your code here to add to database
            
        
    );

这将在您第一次单击时更改按钮颜色,然后在下次单击时恢复颜色。您还可以设置延迟来更改颜色。

注意:您必须根据您的逻辑设置默认按钮颜色。

【讨论】:

先生,您能解释一下如何处理这条线吗? ` final Button button = (Button) v;` 先生,请帮忙,***.com/questions/43321485/…【参考方案2】:
            @Override
            public void onClick(View view) 
                if(!check)
                

                    personViewHolder.img_like_job.setImageResource(R.drawable.ic_thumbsup_blue);
                    check = true;
                
                else
                
                    personViewHolder.img_like_job.setImageResource(R.drawable.ic_thumbsup);
                    check = false;

                
            

【讨论】:

【参考方案3】:

你可以为你的listview使用自定义适配器(它有自己的layout.xml),你可以在里面设置你的clicklistener。

你可以改变颜色或你想要的。其实我确实有你想要的项目。如果你做不到,我会放一些链接。

【讨论】:

我已经在列表视图中实现了自定义适配器,并以正确的方式成功获取数据。请提供一些有用的链接,以实现点赞按钮流程。 所以您的自定义适配器有自己的布局?然后你可以把按钮放在那里然后你可以把 onclick 事件放在你的adatper类中 holder.b1.setOnClickListener(new View.OnClickListener() @Override public void onClick(View v) ); 在你的点击事件中你应该使用 .position(x); 因为它告诉你你在哪一行 好吧,你手动持有,我的意思是你可以设置一个 list 来保存哪些按钮被点击或没有被点击。它的大小与你的 list.length 一样() 那么当一个人点击喜欢按钮时,你应该像这样设置你的列表:my_list[mylist.get(position)]=1如果它是 1 它被点击然后你像这样检查它【参考方案4】:

试试这个链接:

ListView elements with multiple clickable buttons,

Using lists in android (ListView) - Tutorial

这个问题的解决方案实际上比我想象的要容易。您可以简单地在自定义适配器的 getView() 方法中为您正在使用的按钮添加 setOnClickListener()。

【讨论】:

我已经在列表视图中实现了自定义适配器,并以正确的方式成功获取数据。我怎么能发现喜欢按钮被点击了。【参考方案5】:

尝试以下操作:

    button 上使用setOnClickListener()

例如。

viewHolder.imgVwFbLike.setOnClickListener(new View.OnClickListener()  
   @Override public void onClick(View v) 
         // TODO :
         // 1. make webservice call to update like status (Assuming a web service call)
         // 2. Implement a callback for webservice call, to get the status of request.
            if(success) 
             a) change the colour of like btn. and insert the data in Db.
             b) Also maintain a column in db for likestatus(by default set it false).                 
             
        
   );
    假设您在登录时从 db 获取数据,您可以检查 likestatus 并相应地设置按钮颜色。

【讨论】:

当用户再次点击此按钮时我该怎么办......如何点击按钮回到原来的阶段......

以上是关于如何在每个项目的列表视图中实现简单的类似按钮的主要内容,如果未能解决你的问题,请参考以下文章

反应本机列表视图添加项目不起作用

如何在 Flutter 中删除列表视图顶部的项目?

如何从列表视图按钮单击将多个数据添加到数组列表?

如何使用特定项目删除按钮删除列表视图中的项目?

用户按下排序按钮后如何在列表视图中显示排序列表?

如何正确更新详细视图中的 CoreData 对象?