Android 在listview中刷新imageview,单击listener

Android 在listview中刷新imageview,单击listener,android,json,android-listview,Android,Json,Android Listview,我有一个自定义的ListView布局,其中包含一个ImageView和两个按钮;设置主图像并旋转图像 我期望它的行为是,当用户单击Set Primary时,Set Primary按钮将不可见。对于“旋转”按钮,它将通过将图像视图旋转0、90、180、270度来刷新图像视图 所有这些过程都是由服务器完成的。因此,我有一个对web服务的请求,响应将改变UI的状态 以下是listview适配器: @Override public View getView(int i, View view, ViewG

我有一个自定义的ListView布局,其中包含一个ImageView和两个按钮;设置主图像并旋转图像

我期望它的行为是,当用户单击Set Primary时,Set Primary按钮将不可见。对于“旋转”按钮,它将通过将图像视图旋转0、90、180、270度来刷新图像视图

所有这些过程都是由服务器完成的。因此,我有一个对web服务的请求,响应将改变UI的状态

以下是listview适配器:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    ...

    ItemImageModel iim = items.get(i);

    if (iim.getPrimary().equals("0")){
        vh.btnPrimary.setVisibility(View.VISIBLE);
    } else {
        vh.btnPrimary.setVisibility(View.INVISIBLE);
    }

    vh.btnRotate.setVisibility(View.VISIBLE);

    Picasso.with(context) //
            .load(iim.getImage50()) //
            .placeholder(R.drawable.placeholder) //
            .error(R.drawable.error)
            .into(vh.ivPhoto);

    vh.btnPrimary.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d(this.getClass().getSimpleName(), "set primary");

        //  SetAsPrimary();
        }
    });

    vh.btnRotate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d(this.getClass().getSimpleName(), "rotate");
        //  RotateImage();
        }
    });

    return view;
}
成功设置主映像后的JSON响应:

{
  "results": "Successfully set primary image",
  "errors": ""
}
成功旋转图像后的JSON响应。通过POST参数发送学位:

{
  "results": "Successfully set rotate image",
  "errors": ""
}

如何根据新的JSON响应使用更新的UI刷新listview?是否需要刷新使用此适配器的ListFragment?如果有任何问题,请告诉我。

您将在onClickListener中进行Http异步调用。http调用应该有一个返回回调,一旦服务器有响应,就会触发该回调。在该回调中,您可以相应地更新UI。然而,只有当您有一个为回调而精心设置的HttpClient时,这才有效。如果你没有,我会退房的

下面是一个小示例伪代码:

 vh.btnPrimary.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Log.d(this.getClass().getSimpleName(), "set primary");
        MyHttpClient.post(Url url, MyDetails details, new MyCallback() {

            private void onSuccess(JSONBody body) {
                updateUiPrimary();
            }

            private void onFailure(JSONBody body) {
                failedApiCall();
            }
        }
    }
});

vh.btnRotate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Log.d(this.getClass().getSimpleName(), "rotate");
        MyHttpClient.post(Url url, int rotation, new MyCallback() {

            private void onSuccess(JSONBody body) {
                updateUiRotated();
            }

            private void onFailure(JSONBody body) {
                failedApiCall();
            }
        }        
    }
});

我不确定如何进行post调用,或者如何将参数发布到服务器,因此我在url、详细信息、正文等中添加了伪参数。每次用户单击调用异步任务以获取所需图像并将该图像获取到适配器时,它将根据您实现http调用的方式而有所不同。您必须使用case语句,因为您可以创建4个异步任务或将url传递给异步任务。

我已经得到了异步调用部分。很抱歉,如果我写错了问题,但我的问题是如何更新UI状态,即单击时需要更新的单行?如果回调位于单个行的适配器中,则回调将访问该行中的图像。另一个选项是onClick,存储要更新的行的位置,然后在回调上访问适配器中的该位置并更新视图。