如何使用改造库从客户端(使用recyclelerview自定义适配器中的post方法)将数据发布到服务器

时间:2018-02-12 05:41:49

标签: android retrofit2

当我把它放在Activity时。它仍然正常活跃。但是把它放在recyclerview的项目点击事件中。然后它没有激活。任何人都可以在项目点击中放置post方法吗? 我的代码:

$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');

2 个答案:

答案 0 :(得分:0)

您的代码:

   public MyViewHolder(View view){
             super(view);
             txt=view.findViewById(R.id.txt_item_rec);
             itemView.setOnClickListener(new View.OnClickListener()

首先,您使用的是itemView,但是您将view传递给MyViewHolder,然后传递给super。您应该将其替换为view

第二个问题可能是您无法在ViewHolder中找到您在onBindViewHolder中获得该位置的位置,因为视图符号只是您行的模型。

如何在onBindViewHolder方法

中执行此操作的示例
public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //move your code here;
            }
    });
}

答案 1 :(得分:0)

onBindViewHolder对于任何听众来说都是一个完全错误的地方,你可以使用getLayoutPosition()和getAdapterPosition()轻松地在自定义视图持有者上获得位置。

public MyViewHolder(View view){
    super(view);
    txt=view.findViewById(R.id.txt_item_rec);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int pos=getAdapterPosition();
            if(pos!=RecyclerView.NO_POSITION) {
                Toast.makeText(view.getContext(),strings.get(pos),Toast.LENGTH_SHORT).show();
                APIService mapi= ApiUtils.getAPIService();
                mapi.importFileExcel(strings.get(pos)).enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        if(response.isSuccessful()){
                            try {
                                Toast.makeText(context,response.body().string(),Toast.LENGTH_SHORT).show();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {

                    }
                });
            }
        }
    });
}
}