2017-04-03 26 views
0

RecyclerViewという部分があり、RecyclerViewにデータをバインドする、MyRequestFragmentというフラグメントがあります。これはonBindViewHolder()のアダプタクラスを使用しています。runOnUiThread()を呼び出せません

今すぐすべてViewHolder私はボタンがあります。ボタンをクリックするたびにPOSTリクエストがサーバーに送信され、値が更新されます。私の問題は、成功の応答が来たら、私は特定のボタンを隠す必要があるということです。ViewHolder

実際の問題はrunOnUiThread()は、私はViewHolder作成/ bindメソッドの内部でこれを呼び出すにはどうすればよいonBindViewHolder()

runOnUiThread(new Runnable() { 
    public void run() { 

    } 
}); 

に受け入れていないです。

私のonBindViewHolder()完全なコードは参照のために以下のとおりです。

@Override 
    public void onBindViewHolder(MyServiceViewHolder holder, int position) { 
     final MyServiceBean myServiceBean = serviceList.get(position); 
     holder.service_name.setText(myServiceBean.getService_name()); 
     holder.last_updated.setText("Job Updated Date : " +myServiceBean.getDate(myServiceBean.getUpdated_at())); 
     holder.created_date.setText("Job Created Date : " + myServiceBean.getDate(myServiceBean.getCreated_at())); 
     holder.status.setText(myServiceBean.getStatus()); 
     holder.service_note.setText("Service Note : " + myServiceBean.getService_note()); 
     if (myServiceBean.getService_note().toString().isEmpty()) 
      holder.service_note.setVisibility(View.GONE); 

     switch (myServiceBean.getStatus().toString().toLowerCase()) { 
      case "completed": 
       holder.status.setBackgroundColor(Color.GREEN); 
       break; 
      case "on progress": 
       holder.status.setBackgroundColor(Color.YELLOW); 
       break; 
      case "canceled": 
       holder.status.setBackgroundColor(Color.RED); 
       break; 
      case "rejected": 
       holder.status.setBackgroundColor(Color.RED); 
       break; 
      case "accept": 
       holder.status.setBackgroundColor(Color.BLUE); 
       break; 
      default: 
       holder.status.setBackgroundColor(Color.GRAY); 
       break; 
     } 

     if(myServiceBean.getEst_amount() != null) { 
      holder.estimation_region.setVisibility(View.VISIBLE); 
      holder.est_status.setText("Estimation is Available"); 
      holder.btn_approve.setVisibility(View.VISIBLE); 

      holder.est_amount.setText("Estimation Amount: " + myServiceBean.getEst_amount()); 
      if(myServiceBean.getEst_note() != null) 
       holder.est_note.setText("Estimation Note: " + myServiceBean.getEst_note()); 
      if(myServiceBean.getEst_presented_by() != null) 
       holder.est_presented_by.setText("Estimation Prepared By: " + myServiceBean.getEst_presented_by()); 

      if(myServiceBean.getEst_approved_by_customer() == "true"){ 
       holder.btn_approve.setVisibility(View.GONE); 
       holder.est_status.setText("Estimation Approved on : " + myServiceBean.getEst_approved_date()); 
      }else{ 
       holder.btn_approve.setVisibility(View.VISIBLE); 
      } 

     }else{ 
      holder.estimation_region.setVisibility(View.GONE); 
      holder.est_status.setText("Estimation on Process"); 
      holder.btn_approve.setVisibility(View.GONE); 
     } 

     holder.btn_approve.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       updateRequest(); 
      } 
     }); 




    } 

    private void updateRequest() { 
     JSONObject jsonObject = new JSONObject(); 
     try { 
      jsonObject.put("est_approved_by_customer", true); 
      jsonObject.put("est_approved_date", "2017-10-30"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     //progress_dialog.show(); 
     OkHttpClient client = new OkHttpClient(); 

     MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 
     okhttp3.RequestBody body = RequestBody.create(JSON, jsonObject.toString()); 


     okhttp3.Request request = new Request.Builder() 
       .url(ApplicationContants.BASE_URL + ApplicationContants.MY_SERVICE_APPROVE_URL) 
       .post(body) 
       .build(); 

     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, final IOException e) { 

      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       try { 
        String responseString = response.body().string(); 

        JSONObject jsonObject = new JSONObject(responseString); 
        Gson gson = new Gson(); 
        final MyServiceBean myServiceBean = gson.fromJson(jsonObject.toString(), MyServiceBean.class); 

        runOnUiThread(new Runnable() { 
         public void run() { 

         } 
        }); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
+0

可能な重複停止。どうすればこの問題を解決できますか?](http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) –

+0

エラーログ – lal

+0

@lalを実際に記述してください。コンパイルされていません。 runOnUiThreadは構文エラーです。赤色で表示されます – nifCody

答えて

2

runOnUiThread()Activityする方法です。

のどちらか(あなたは1へのアクセス権を持っている場合)Activityインスタンス上でそれを呼び出すか、メインスレッドのメッセージキューにごRunnableを投稿するHandlerを使用します。[残念ながらMyAppを持っているの

new Handler(Looper.getMainLooper()).post(new Runnable() { 
    public void run() { 
     // do something 
    } 
}); 
関連する問題