【问题标题】: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;
            }
        });

【问题讨论】:

  • 看我的回答。如果它不起作用,请告诉我

标签: android listview android-intent android-button


【解决方案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
            }
        }
    });

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

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

【讨论】:

【解决方案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】:

    尝试以下操作:

    1. 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).                 
                } 
            }
       );
    
    1. 假设您在登录时从 db 获取数据,您可以检查 likestatus 并相应地设置按钮颜色。

    【讨论】:

    • 当用户再次点击此按钮时我该怎么办......如何点击按钮回到原来的阶段......
    猜你喜欢
    • 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
    相关资源
    最近更新 更多