【问题标题】:Android: Gridview Items and making changes to individual itemsAndroid:Gridview 项目和对单个项目进行更改
【发布时间】:2014-12-31 15:47:24
【问题描述】:

我正在构建一个类似于 instagram 的应用程序,仅用于培训目的,基本上我有一个通过网格视图适配器填充的图像列表。在“single_list_item”的 XML 文件中,我定义了一个按钮,该按钮将与网格视图列表中每个项目的图像一起添加。

但是,我希望能够单击这些按钮以分别在这些图像上“点赞”(类似于 instagram 的点赞系统)。换句话说:用户可以在第一张图像上点赞,而不是其他图像。我使用不同的图片资源显示了一个赞。

图像由网格视图填充

每张图片下方都有一个赞按钮

我点击属于特定图像的随机点赞按钮

该图片应被选为“喜欢”

到目前为止我尝试了什么:

我的网格适配器:

public class ProductGridInflator extends ArrayAdapter<Product>{

.......
.......

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

View child = convertView;
        final RecordHolder holder;
        LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); 

    if (child == null) {            
      child = inflater.inflate(R.layout.grid_single, parent, false);
      holder = new RecordHolder();
      holder.productName = (TextView) child.findViewById(R.id.grid_text);
      holder.image = (ImageView) child.findViewById(R.id.grid_image);
      holder.heartButton = (ImageButton) child.findViewById(R.id.btnHeartLike);
      holder.heartButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (v.isSelected()){
                    v.setSelected(false);
                } else {
                    holder.heartButton.setSelected(false);
                    v.setSelected(true);
                    }
                }
            });
            child.setTag(holder);
        }else{
            holder = (RecordHolder) child.getTag();
        }
    }
}

我正在从选择器中选择合适的图片(喜欢或不喜欢)

 <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@drawable/heart_clicked" android:state_selected="true"/>
        <item android:drawable="@drawable/heart304"/>
    
    </selector>

但是,当我测试这段代码时,它的行为异常。当我单击特定图像列表项的点赞按钮时,也会单击其他两个或三个列表项的点赞按钮。有没有更好的方法来完成这项工作?每个列表项的单独按钮?

【问题讨论】:

    标签: java android button gridview onclicklistener


    【解决方案1】:

    问题是您正在重用 onclicklisteners .. 从您的 getView 中删除它

    holder.heartButton.setOnClickListener(new OnClickListener() {
    

    而是写在你的活动中

    YouGridView.setOnItemClickListener
    

    并添加单击项目时要执行的操作。

    【讨论】:

    • 问题是,我的 gridview 已经有一个 OnItemClickListener ,它将用户带到不同的页面。因此,当我单击图像时,应用会将用户带到不同的页面以最大化并显示图像。
    猜你喜欢
    • 2021-04-15
    • 2021-09-30
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2018-09-02
    相关资源
    最近更新 更多