2017-01-21 18 views
-6

ここでは、データベースから値を取得してListViewにリストしていますが、20項目後にListViewの最後までスクロールしたときにListViewに項目を追加したい場合は、しかし、ユーザーが最後までスクロールすると、ListViewは完全に消去され、新しい項目が追加されます。しかし、私はここで androidのListViewに項目を追加する方法

は私のAndroidのコードです...新しいアイテムが以前のリスト自体の末尾に追加する必要があります。

これは時のonCreate()

public void getLocalJobs() { 
    empty.setVisibility(TextView.GONE); 
    String url = ConfigCuboid.GET_JOBS_LOCAL; 
    String url1 = Tags; 
    String URL = url + url1; 
    StringRequest stringRequest = new StringRequest(URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      showJSONLocal(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }); 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

@TargetApi(Build.VERSION_CODES.M) 
private void showJSONLocal(String response) { 
    ParseJSONLocal pj = new ParseJSONLocal(response); 
    pj.parseJSONLocal(); 

    CustomListLocal c1 = new CustomListLocal(this, ParseJSONLocal.job_local_id, ParseJSONLocal.user_names, ParseJSONOnline.job_typess, ParseJSONLocal.job_titles, ParseJSONLocal.job_works, 
      ParseJSONLocal.job_dates, ParseJSONLocal.job_months, ParseJSONLocal.job_years, 
      ParseJSONLocal.job_times, ParseJSONLocal.job_periods, ParseJSONLocal.job_areas, ParseJSONLocal.job_rates, 
      ParseJSONLocal.user_ids, ParseJSONLocal.job_detailss, ParseJSONLocal.image, ParseJSONLocal.regtoken 
      , ParseJSONLocal.verify); 
    listViewWork.setAdapter(c1); 
    Toast.makeText(getApplicationContext(),"ListNo=="+CustomListLocal.LastLocalJobId,Toast.LENGTH_SHORT).show(); 


    if (c1.isEmpty()) { 
     empty.setVisibility(TextView.VISIBLE); 
     pb.setVisibility(ProgressBar.GONE); 
    } 
    listViewWork.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int poss, long id) { 
      Intent is = new Intent(getApplicationContext(), WorkProfileLocal.class); 
      is.putExtra("Positions", poss); 
      startActivity(is); 
     } 
    }); 


    listViewWork.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 

     } 

     @Override 
     public void onScroll(AbsListView view, 
          int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      //Algorithm to check if the last item is visible or not 
      final int lastItem = firstVisibleItem + visibleItemCount; 
      if (lastItem == totalItemCount) { 
       // you have reached end of list, load more data 
       // Toast.makeText(getApplicationContext(),"ListIsOver",Toast.LENGTH_SHORT).show(); 
       Toast.makeText(getApplicationContext(),"ListNo=="+CustomListLocal.LastLocalJobId,Toast.LENGTH_SHORT).show(); 
       LoadLocalList(); 
      } 

     } 


    }); 
} 

で実行されます

リストビューの端部は、このメソッドが実行されます。

public void LoadLocalList(){ 

    empty.setVisibility(TextView.GONE); 
    String url = ConfigCuboid.GET_LOADED_JOBS_LOCAL; 
    String urll1="last_local_job_id="; 
    String urll11 = CustomListLocal.LastLocalJobId; 
    String urll="&job_title[]="; 
    String url1 = Tags; 

    String URL = url + urll1+urll11+urll+url1; 
    StringRequest stringRequest = new StringRequest(URL, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      showJSONLocall(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }); 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

@TargetApi(Build.VERSION_CODES.M) 
private void showJSONLocall(String response) { 
    ParseJSONLocal pj = new ParseJSONLocal(response); 
    pj.parseJSONLocal(); 

    CustomListLocal c2 = new CustomListLocal(this, ParseJSONLocal.job_local_id, ParseJSONLocal.user_names, ParseJSONOnline.job_typess, ParseJSONLocal.job_titles, ParseJSONLocal.job_works, 
      ParseJSONLocal.job_dates, ParseJSONLocal.job_months, ParseJSONLocal.job_years, 
      ParseJSONLocal.job_times, ParseJSONLocal.job_periods, ParseJSONLocal.job_areas, ParseJSONLocal.job_rates, 
      ParseJSONLocal.user_ids, ParseJSONLocal.job_detailss, ParseJSONLocal.image, ParseJSONLocal.regtoken 
      , ParseJSONLocal.verify); 
    listViewWork.setAdapter(c2); 
    Toast.makeText(getApplicationContext(),"ListNo=="+CustomListLocal.LastLocalJobId,Toast.LENGTH_SHORT).show(); 


    if (c2.isEmpty()) { 
     empty.setVisibility(TextView.VISIBLE); 
     pb.setVisibility(ProgressBar.GONE); 
    } 
    listViewWork.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int poss, long id) { 
      Intent is = new Intent(getApplicationContext(), WorkProfileLocal.class); 
      is.putExtra("Positions", poss); 
      startActivity(is); 
     } 
    }); 


} 

答えて

3

このラインはあなたのリスト全体をリセットし

listViewWork.setAdapter(c2); 

ArrayAdapterの任意のインスタンスに直接追加することができます。また、一度に1つのアダプタのみをListViewに配置することができます。

つまり、onCreateに1つのアダプタを設定してから、他の場所にそのアダプタを追加するだけです。 setAdapterをもう一度呼び出さないと、すべてのデータが保持され、adapter.addを呼び出すとListViewが更新されます

重複するコードを減らすことをお勧めします。また、2つの別々のURLがデータを読み込んでいる理由もわかりません。

関連する問題