java - Arraylist 将最后一个元素读取为倒数第二个元素

标签 java android gridview arraylist baseadapter

我有一个 Adapter 类,可以为 gridview 扩充项目。我正在使用 ArrayList 来存储所单击的 gridview 项目的某些详细信息。我面临的问题是最后一个元素没有被单独识别。如果我单击最后一个元素,它会提供有关其上方元素的信息。其余所有其他元素都很好。

public class MyAdaptertwo extends BaseAdapter
{
    public List<Item> items = new ArrayList<Item>();
    private LayoutInflater inflater;
    int j;
    public static List<list> rowitems = new ArrayList<list>();
    static int size=0;

    public MyAdaptertwo(Context context)
    {
        inflater = LayoutInflater.from(context);
        items.add(new Item("S", R.drawable.s,"1",R.drawable.v));
        items.add(new Item("F", R.drawable.t,"2",R.drawable.v));
    }

    @Override
    public int getCount() 
    {
        return items.size();
    }

    @Override
    public Object getItem(int i)
    {
        j=i;
        return items.get(i);
    }

    public void setCost(int i,String a)
    {
        items.get(i).cost=a;
    }

    @Override
    public long getItemId(int i)
    {
        return items.get(i).colorId;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup)
    {
        View v = view;
        ImageView picture;
        ImageView vn;
        TextView name;
        TextView costs;
        if(v == null)
        {
            v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
            v.setTag(R.id.picture, v.findViewById(R.id.picture));
            v.setTag(R.id.vnon, v.findViewById(R.id.vnon));
            v.setTag(R.id.text, v.findViewById(R.id.text));
            v.setTag(R.id.cost,v.findViewById(R.id.cost));
        }

        picture = (ImageView)v.getTag(R.id.picture);
        vn = (ImageView)v.getTag(R.id.vnon);
        name = (TextView)v.getTag(R.id.text);
        costs = (TextView)v.getTag(R.id.cost);
        Item item = (Item)getItem(i);
        picture.setImageResource(item.colorId);
        name.setText(item.name);
        costs.setText(item.cost);
        vn.setImageResource(item.vnId);
        Button add=(Button)v.findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)  
            {
               list item = new list(items.get(j - 1).colorId, items.get(j - 1).name, Integer.toString(co[j-1]), Integer.toString(no[j - 1]));
                    rowitems.add(item);
              //something
            }
        });

        Button sub=(Button)v.findViewById(R.id.sub);
        sub.setOnClickListener(new View.OnClickListener() {  
            @Override
            public void onClick(View v) 
            {
               //something
            }
        });

        return v;
    }

    private class Item
    {
        final String name;
        final int colorId;
        String cost;
        final int vnId;

        Item(String name, int drawableId,String cost,int vnId)
        {
            this.name = name;
            this.colorId = drawableId;
            this.cost=cost;
            this.vnId=vnId;
        }
    }
}

最佳答案

使用setTaggetTag View类的方法,在onClick方法中获取点击的Item对象。

Item item = (Item)getItem(i);
Button add=(Button)v.findViewById(R.id.add);
add.setTag(i);
add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v)  {
        int position = (int)v.getTag();
        //do something with item object
        Item item = items.get(position);
        list listItem = new list(item.colorId, item.name, Integer.toString(co[position]), Integer.toString(no[position]));
        rowitems.add(listItem);       
    }
});

关于java - Arraylist 将最后一个元素读取为倒数第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34509358/

相关文章:

java - 为什么 Java ArrayLists 不会自动收缩

android - 我应该如何为 exoplayer 创建包含视频和图像文件 URI 的 ConcatenatingMediaSource?

c# - 被youtube重叠的modalpopupextendar嵌入iframe

dictionary - Flutter ExpansionTile child 作为 Gridview?

c# - 使用上一页获取 GridView 选定行值

java - 使用 3 个数学运算符的所有可能组合填充 2D 数组

java - 将冒泡排序作为单独的数组返回

java - JPQL 不区分大小写

java - 在 Android 应用程序内处理 paytm CallBack URL 响应

android - 如何检查我的用户设备上是否安装了 Android 电子市场?