2017-04-03 54 views
0

我已經使用Glide實現了一個圖庫。我的代碼如下:Glide視圖中的進度對話框

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

pDialog.hide();置於onResponse()的末尾,這是因爲在循環結果數組並設置數據之前隱藏進度對話框。

0

我想讓對話框保持更長的時間,至少要有一半的圖像加載(比如10箇中的5個) 。

如果你想做到這一點,你可以根據你的需要內部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();如果(i> 5){pDialog.hide();} – Pra

+0

你的意思是這樣的? – Pra