2016-06-16 2 views
0

У меня есть фрагмент, который содержит listview, у которого есть данные с сервера, и я добавляю нижний колонтитул progressbar в нижней части списка, когда пользователь просматривает вниз listview, индикатор прогресса внизу списка просматривается пользователю и отправляет запрос сервера и добавляет еще несколько данных в представлении списка проблема заключается в том, что при прокрутке до конца индикатор прогресса также отображается, но отправляет запрос сервера назад. Как я могу устранить эту проблему.Как сделать больше нижнего колонтитула с progressbar внизу списка?

вот мой код списке следует свиток

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
     Log.i("a", "scrolling stopped..."); 
    } 
} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

    if (firstVisibleItem + visibleItemCount == totalItemCount-1 && totalItemCount != 0) { 
     if (!isloading) { 
      // It is time to add new data. We call the listener 
      isloading = true; 
      if (NetworkUtil.isConnected(getActivity())) { 
       m_n_DefaultRecordCount = 5;// increment of record count by 5 on next load data 
       m_n_DeafalutLastCount = m_n_DeafalutLastCount + 5;// same here.....as above 

       sz_RecordCount = String.valueOf(m_n_DefaultRecordCount);// convert int value to string 
       sz_LastCount = String.valueOf(m_n_DeafalutLastCount);// convert int value to string ///// 
       loadmoreData(); 
      } else { 
       Toast.makeText(getActivity(), "Please check internet connection !", Toast.LENGTH_LONG).show(); 
      } 

     } 
    } 
} 

и вот мой код для отправки запроса, когда прогрессбар колонтитул показан пользователю в ListView

public void loadmoreData() { 

    try { 
     String json; 
     // 3. build jsonObject 
     final JSONObject jsonObject = new JSONObject();// making object of Jsons. 
     jsonObject.put("agentCode", m_szMobileNumber);// put mobile number 
     jsonObject.put("pin", m_szEncryptedPassword);// put password 
     jsonObject.put("recordcount", sz_RecordCount);// put record count 
     jsonObject.put("lastcountvalue", sz_LastCount);// put last count 
     Log.d("CAppList:",sz_RecordCount); 
     Log.d("Capplist:",sz_LastCount); 
     // 4. convert JSONObject to JSON to String 
     json = jsonObject.toString();// convert Json object to string 

     System.out.println("Server Request:-" + json); 
     requestQueue = Volley.newRequestQueue(getActivity()); 

     jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, CServerAPI.m_DealListingURL, jsonObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       System.out.println("Response:-" + response); 
       try { 
        JSONArray posts = response.optJSONArray("dealList");// GETTING DEAL LIST 
        for (int i = 0; i < posts.length(); i++) { 
         JSONObject post = posts.getJSONObject(i);// GETTING DEAL AT POSITION AT I 
         item = new CDealAppDatastorage();// object create of DealAppdatastorage 
         item.setM_szHeaderText(post.getString("dealname"));//getting deal name 
         item.setM_szsubHeaderText(post.getString("dealcode"));// getting deal code 
         item.setM_szDealValue(post.getString("dealvalue")); 

         if (!s_oDataset.contains(item)) { 
          s_oDataset.add(item); 
         } 
        } 
        isloading=false; 
        m_oAdapter.notifyDataSetChanged(); 
        if (response.getString("resultdescription").equalsIgnoreCase("Connection Not Available")) {//server based conditions 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Connection Lost !", getActivity()); 
        } else if (response.getString("resultdescription").equalsIgnoreCase("Deal List Not Found")) {// serevr based conditions ..... 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "No more deals available", getActivity()); 
         m_ListView.removeFooterView(mFooter); 
         requestQueue.cancelAll(TAG); 
        } else if (response.getString("resultdescription").equalsIgnoreCase("Technical Failure")) { 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Technical Failure", getActivity()); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       System.out.println("Error:-" + error); 
       if (error instanceof TimeoutError) { 
        CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Connection lost ! Please try again", getActivity()); 
       } else if (error instanceof NetworkError) { 
        CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "No internet connection", getActivity()); 
       } 
      } 
     }); 
     requestQueue.add(jsonObjectRequest); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

ответ

0

Все, что вам нужно сделать, это поддерживать флаг для сетевого запроса и один для noMoreDataLeft.

boolean noMoreDataLeft; 
boolean requestGoingOn; 

Каждый раз, когда вы делаете сетевой вызов, просто изменяйте значение requestGoingOn на true. И когда вы узнаете через свой api, что на сервере больше нет данных, сделайте noMoreDataLeft true.

Теперь определим две константы для шоу загрузки и данных строки -

private final static int TYPE_LOADING = 0; 
private final static int TYPE_DATA = 1; 

Теперь -

@Override 
public int getItemCount() { 
    return data.size() + (requestGoingOn && !isNoMoreDataLeft ? 1 : 0); 
} 

Это добавит больше строки, когда запрос происходит. Теперь вам просто нужно проверить текущую позицию, если она больше, чем data.size, а затем возвращает тип как загрузку.

@Override 
    public int getItemViewType(int position) { 
     return position >= data.size() ? TYPE_LOADING : TYPE_DATA; 
    } 

Все, теперь itemType будет доступен, чтобы вы могли решить, какой вид вам нужно показывать. Надеюсь, это поможет :)

+0

ПОЖАЛУЙСТА, ИЗМЕНИТЬ МОЙ КОД – vishwas

Смежные вопросы