Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从自定义对话框更新Listview行UI_Android_Android Listview_Android Dialog - Fatal编程技术网

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

Android 从自定义对话框更新Listview行UI,android,android-listview,android-dialog,Android,Android Listview,Android Dialog,我正在努力更新自定义listview中一行中一个按钮的图像。我已经为listview创建了一个自定义适配器类。单击listview一行中的按钮,我打开了一个自定义对话框。单击对话框的确定按钮,现在我不想更改该列表视图中按钮的图像 目前,我刚刚在listview中创建了静态按钮,并将该按钮的对象传递给自定义对话框方法。我使用的是简单的listview,而不是片段 @Override public View getView(int position, View convertView, Vi

我正在努力更新自定义listview中一行中一个按钮的图像。我已经为listview创建了一个自定义适配器类。单击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是我传递给自定义对话框方法的按钮的对象。通过此操作,可以在任何行的listview上随机更新图像

请给我一些更好的建议

简要说明:

适配器
充当数据模型的控制器,在您的示例中是一个
列表
,并在getView()方法中相应地更新其分配的
列表视图

您的目标是,每当您执行某个操作时,单击鼠标,即可更改
列表视图的可视状态。只要在执行操作时更改
列表视图的
适配器
后面的数据模型,并要求
列表视图
适配器
的帮助下重新绘制自己,就可以实现这一点

代码:

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

  • 在getView()中,您的
    视图将根据此按下的状态自动初始化

    viewHolder.itemSelection.whatevermethodyouwant(itemsInfo.get(position).isPressed)
    
  • 当您想要更改行的状态时,只需在给定位置更改数据模型,然后再次更新
    列表视图

    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
        }
    });
    

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

    您能发布完整的getView方法吗?问题是,您应该在适配器后面更改数据模型,并让ListView基于此更新自身,而不是自己直接更改视图。@DroidBender我已经粘贴了整个getview代码。另外,我在其他类中创建了cutom对话框SelectPopup并调用了该类的方法。谢谢您的回复。但是我必须先打开一个自定义对话框,单击ListItem,然后更改我在其他类中创建的对话框的OK行的状态。然后,您可以简单地创建一个回调,当您按下OK时返回到适配器,并相应地编辑/更新您的itemsInfo模型。要创建接口或回调,您可以在此处看到一个示例: