在点击监听器上的列表视图中刷新图像视图

时间:2014-03-10 07:08:08

标签: android json android-listview

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

我期望它的行为是当用户点击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刷新列表视图?我是否需要刷新使用此适配器的ListFragment?如果有的话请告诉我。

2 个答案:

答案 0 :(得分:0)

您将在onClickListener中进行Http异步调用。你的http调用应该有一个返回回调,一旦有来自服务器的响应就会被触发。在该回调中,您可以相应地更新UI。但是,只有当你有一个很好地为回调设置的HttpClient时,这才有效。如果您没有,我会查看retrofit

这是一个小例子伪代码:

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

我不确定你如何进行你的帖子调用,或者你如何将参数发布到服务器,所以我输入了伪参数url,细节,正文等。它将根据你如何实现http调用而不同

答案 1 :(得分:0)

每次用户点击调用异步任务以获取所需的图像并将该图像提取到适配器。您必须使用case语句,因为您可以创建4个异步任务或将url传递给异步任务。