【问题标题】:Update Listview row UI from custom Dialog从自定义对话框更新 Listview 行 UI
【发布时间】:2014-04-02 07:57:01
【问题描述】:

我正在努力更新自定义列表视图中连续一个按钮的图像。我为列表视图创建了一个自定义适配器类。单击一行列表视图中的按钮时,我打开了一个自定义对话框。 Onclick 对话框的 OK 按钮 现在我想更改该列表视图中按钮的图像。

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

@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 是我传递给自定义对话框方法的那个按钮的对象。通过这种方式,图像在任何行的列表视图上随机更新。

请建议我一些更好的想法来做到这一点。

【问题讨论】:

  • 你能发布你完整的getView方法吗?问题是您应该更改适配器后面的数据模型,并让 ListView 基于此更新自己,而不是自己直接更改视图。
  • @DroidBender 我已经粘贴了整个 getview 代码。我还在其他类 SelectPopup 中创建了自定义对话框并调用了该类的方法。

标签: android android-listview android-dialog


【解决方案1】:

简要说明:

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

您的目标是在您执行特定操作(即单击)时更改ListView 的视觉状态。只需在执行操作时更改ListViewAdapter 后面的数据模型并要求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
        }
    });
    

这只是解释事件流程的伪代码。希望它能帮助您改进实施。

【讨论】:

  • 感谢您的回复。但是我必须先打开一个自定义对话框,首先打开 ListItem 的 onClick,然后更改我在其他类中创建的对话框的 OK 的 onClick 行的状态。
  • 然后您可以简单地创建一个回调,当您按下 OK 并相应地编辑/更新您的 itemsInfo 模型时,该回调将返回您的适配器。要创建接口或回调,您可以在此处查看示例:stackoverflow.com/a/22326209/1479570
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多