从自定义对话框更新Listview行UI

时间:2014-04-02 07:57:01

标签: android android-listview android-dialog

我正在努力更新自定义列表视图中的一行按钮的图像。我为listview创建了一个自定义适配器类。单击列表视图中的一行内的按钮,我打开了一个自定义对话框。现在点击对话框的确定按钮,我想要更改列表视图中按钮的图像。

目前我刚刚在listview中创建了静态按钮,并将该按钮的对象传递给自定义对话框方法。我使用简单的listview而不是片段。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ItemInfoViewHolder viewHolder;
        Log.d("Inside Get View", ""+position);
        if (convertView == null) {
            convertView = listInflater.inflate(R.layout.iteminfo_view_row, null);
            viewHolder = new ItemInfoViewHolder();
            viewHolder.itemSelection = (Button)convertView.findViewById(R.id.itemselectionTextview);

            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ItemInfoViewHolder)convertView.getTag();
        }
        try{
            viewHolder.itemSelection.setId(itemsInfo.get(position).getId());
            );

            viewHolder.itemSelection.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    System.out.println("Item Id"+v.getId());
                    Toast.makeText(mContext, "Item Button Clicked", Toast.LENGTH_SHORT).show();
                    int itemId = v.getId();
                    SelectPopup selectPopup = new SelectPopup(mContext, R.style.myCoolDialog);
                    selectPopup.selectQuantity(itemsInfo,itemId,viewHolder.itemSelection);
                }
            });
        }catch(Exception e){
            e.printStackTrace();
        }
        return convertView;
    }

这里 viewHolder.itemSelection 是我传递给自定义对话框方法的那个按钮的对象。这样,图像在任何行的列表视图上随机更新。

请建议我做一些更好的主意。

1 个答案:

答案 0 :(得分:1)

简要说明:

Adapter充当您的数据模型的控制器,在您的情况下为List<itemsInfo>,并在getView()方法中相应地更新其指定的ListView

您的目标是在执行特定操作时单击ListView的视觉状态。这可以通过在执行操作时更改Adapter ListView后面的数据模型来完成,并让ListViewAdapter的帮助下重绘自己。

在代码中:

  1. 在包含特定状态的itemsInfo中添加一个字段。这可以是任何格式或形式,但是现在,让我们使用一个名为isPressed的布尔值。

  2. 在你的getView()中,你的View将根据此按下的状态进行初始化。

    viewHolder.itemSelection.whatevermethodyouwant(itemsInfo.get(position).isPressed)
    
  3. 如果要更改行的状态,只需更改给定位置的数据模型,然后再次更新ListView

    viewHolder.itemSelection.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            itemsInfo.get(position).setPressed(whatever);
            notifyDataSetChanged(); // This is a call for your Adapter and will refill the ListView
        }
    });
    
  4. 这只是解释事件流的伪代码。希望它能帮助您改进实施。