2017-04-03 7 views
0

グライドを使ってギャラリーを実装しました。私のコードは以下の通りです:グライドビューのプログレスダイアログ

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     pDialog = new ProgressDialog(this); 
     images = new ArrayList<>(); 
     mAdapter = new GalleryAdapter(getApplicationContext(), images); 

     RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), 2); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     recyclerView.addOnItemTouchListener(new GalleryAdapter.RecyclerTouchListener(getApplicationContext(), recyclerView, new GalleryAdapter.ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("images", images); 
       bundle.putInt("position", position); 

       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       SlideshowDialogFragment newFragment = SlideshowDialogFragment.newInstance(); 
       newFragment.setArguments(bundle); 
       newFragment.show(ft, "slideshow"); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

     fetchImages(); 
    } 

    private void fetchImages() { 

     pDialog.setMessage("Downloading images..."); 
     pDialog.show(); 

     JsonArrayRequest req = new JsonArrayRequest(endpoint, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 

         images.clear(); 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject object = response.getJSONObject(i); 
           Image image = new Image(); 
           image.setName(object.getString("name")); 

           JSONObject url = object.getJSONObject("url"); 
           image.setSmall(url.getString("small")); 
           image.setMedium(url.getString("medium")); 
           image.setLarge(url.getString("large")); 
           image.setTimestamp(object.getString("timestamp")); 

           images.add(image); 

          } catch (JSONException e) { 
           Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          } 
         } 

         mAdapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Error: " + error.getMessage()); 
       pDialog.hide(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 

私は進捗ダイアログを使いました。現在、ギャラリーを開くと、数秒後にダイアログが表示され、消えます。その後、アクティビティは空のままです。しばらくすると画像が読み込まれます。私はこれを避けたい。少なくとも画像の半分(例えば10のうち5つ)が読み込まれるまで、ダイアログを長くしておきたい。

答えて

0

onResponse()の末尾にpDialog.hide();を挿入します。これは、結果配列をループしてデータを設定する前に進捗ダイアログを表示していないためです。

0

画像の半分までは、少なくとも画像の半分まで、ダイアログを長くしたい()。

これを実現したい場合は、onResponse()の中で必要に応じて一定の回数繰り返した後にprogressDialogを非表示にすることができます。その点で、すべての反復でデータ・セットの変更(notifyDataSetChanged())についてアダプターに通知する必要があります。

あなたは以下のようにコードを変更することができます。

JsonArrayRequest req = new JsonArrayRequest(endpoint, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString());       

         images.clear(); 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject object = response.getJSONObject(i); 
           Image image = new Image(); 
           image.setName(object.getString("name")); 

           JSONObject url = object.getJSONObject("url"); 
           image.setSmall(url.getString("small")); 
           image.setMedium(url.getString("medium")); 
           image.setLarge(url.getString("large")); 
           image.setTimestamp(object.getString("timestamp"));  
           images.add(image); 
           if(i > 5){      // Here is a change 
            pDialog.hide(); 
           } 

          } catch (JSONException e) { 
           Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          } 
         } 
         mAdapter.notifyDataSetChanged(); // Updated 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Error: " + error.getMessage()); 
       pDialog.hide(); 
      } 
     }); 

・ホープ、このことができます。

+0

画像自体が読み込まれていないため、結果が表示されません。この問題はなぜですか? – Pra

+0

mAdapter.notifyDataSetChanged(); if(i> 5){pDialog.hide();} – Pra

+0

このような意味ですか? – Pra

関連する問題