2014-08-27 49 views
0

我想在android項目中使用分頁。有60個數據,我想在列表視圖中顯示10個。但問題是我在列表中得到重複項負載,即第一10,隨後再次在同一10:在android中使用分頁

的代碼:

public class VideoActivity extends Activity { 
    private ConnectionDetector cd; 
    public HttpResponse video_respons; 
    public String video_string_response1; 
    public ArrayList<NameValuePair> nameValuePairs_Video; 
    ArrayList<Ice_data> ice_list; 
    String URL="http://footballultimate.com/icebucket/index.php/api/getVideo"; 
    String URL1="http://footballultimate.com/icebucket/index.php/api/getVideoByLimit"; 
    JSONObject jsonobj; 
    JSONArray jsonarr; 
    Ice_data iceobj; 
    CustomIceAdapter ciadp; 
    ListView list; 
    int start = 1; 
    int limit = 10; 
    boolean loadingMore = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_video); 
     ice_list=new ArrayList<Ice_data>(); 
     // GEt all Data for Video 
     cd = new ConnectionDetector(VideoActivity.this); 
     Config.isInternetPresent = cd.isConnectingToInternet(); 
     if (!Config.isInternetPresent) { 

      AlertDialog.Builder builder = new AlertDialog.Builder(VideoActivity.this); 
      // Shuld be fail icon 
      builder.setIcon(R.drawable.ic_launcher); 
      builder.setMessage("Connection Not Available !" + "\n" 
        + "Please enable your Internet Connection"); 
      builder.setTitle("INTERNET CONNECTION"); 
      builder.setPositiveButton("Ok", 
        new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        dialog.cancel(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } else { 
      new GetVideos().execute(); 
     } 
     // Get all Data for Video 
     list= (ListView) findViewById(R.id.videoList); 
     list.setOnScrollListener(new OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(AbsListView arg0, int arg1) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onScroll(AbsListView arg0, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
       int lastInScreen = firstVisibleItem + visibleItemCount; 
        if((lastInScreen == totalItemCount) && !(loadingMore)){  

         new GetVideos().execute(); 
        } 

      } 
     }); 
    } 

    class GetVideos extends AsyncTask<String, String, String> { 
     private ProgressDialog pDialog; 
     private HttpResponse vip_respons; 

     protected void onPreExecute() { 
      super.onPreExecute(); 

      pDialog = new ProgressDialog(VideoActivity.this); 
      pDialog.setTitle("Processing..."); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... arg0) { 
      loadingMore = true; 
      // TODO Auto-generated method stub 
      try { 

       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(URL1); 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("start",String.valueOf(start))); 
       nameValuePairs.add(new BasicNameValuePair("limit",String.valueOf(limit))); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       video_respons = httpclient.execute(httppost); 
       //video_string_response1 = getResponseBody(video_respons); 
       video_string_response1=responsetostring.getResponseBody(video_respons); 
       //Log.d("Store_Response", the_string_response1); 

      } catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 
      return null; 
     } 
     protected void onPostExecute(String video_string) { 
      try{ 
        if(pDialog.isShowing()){ 
         pDialog.dismiss(); 
        } 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
      finally 
      { 
       pDialog.dismiss(); 
      } 
      if (video_string_response1!=null) { 
       //displayjsonstring(); 
       geticevalues(video_string_response1); 

      } 
     } 
    } 
    public void geticevalues(String result) 
    { 

     try { 
      jsonobj=new JSONObject(result); 
      //ice_list=new ArrayList<Ice_data>(); 
      jsonarr=jsonobj.getJSONArray("video_data"); 
      for(int i=0;i<jsonarr.length();i++) 
      { 
       JSONObject jso=jsonarr.getJSONObject(i); 
       iceobj=new Ice_data(); 
       iceobj.title=jso.getString("title"); 
       iceobj.image_URL=jso.getString("image"); 
       iceobj.video_URL=jso.getString("url"); 
       ice_list.add(iceobj); 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     ciadp=new CustomIceAdapter(VideoActivity.this,ice_list); 
     ciadp.notifyDataSetChanged(); 
     loadingMore = false; 
     list.setAdapter(ciadp); 
     start+=10; 
    } 

的開始和限制是其示出起始和物品中的每個都request.I數的值還增加了起始值start+=10。我將開始和限制值傳遞給異步類中的web服務。

有沒有一種更優雅的方式來做到上述?或者你可以修復上述代碼。請幫助!

+0

當請求新數據時,起始值和返回數據是否正確? – calvinfly 2014-08-27 08:40:45

回答

0

初始化內部doInBackground ice_list將消除重複

保護字符串doInBackground(字符串...爲arg0){ loadingMore = TRUE;

 ice_list=new ArrayList<Ice_data>(); 

     // TODO Auto-generated method stub 
     try {...................... 
+0

這並沒有解決這個問題..如果你說每個web服務調用新的關鍵字,然後將其中的舊數據將被刪除,該名單將開始作爲一個新的... – user3852672 2014-08-27 08:50:22

+0

我不知道它的好處這一行ciadp = new CustomIceAdapter(VideoActivity.this,ice_list);在這行看到這個教程之前,它適用於我http://androidadapternotifiydatasetchanged.blogspot.in/ – 2014-08-27 09:14:38