Android:Gridview项目并对单个项目进行更改

时间:2014-12-31 15:47:24

标签: java android button gridview onclicklistener

我正在构建一个类似于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>

然而,当我测试它时,这段代码行为不端。当我点击特定图像列表项的类似按钮时,也会点击两个或三个其他列表项,如按钮。有没有更好的方法来完成这项工作?每个列表项的单个按钮?

1 个答案:

答案 0 :(得分:0)

问题是您正在重复使用onclicklisteners ..从getView

中删除
holder.heartButton.setOnClickListener(new OnClickListener() {

而是写下你的活动

YouGridView.setOnItemClickListener

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