0

J'utilise OnScrolListener pour ajouter des éléments à un ListView dans mon application. Le défilement fonctionne bien, mais je suis confronté à une erreur. quand je défiler vers le bas, les données ajouter à la liste, mais la position de départ du haut me aider .PleaseComment implémenter Scroll Listener dans android

public class Hotel_list_activity extends AppCompatActivity implements View.OnClickListener { 
Global global; 
ListView hotel_list; 
SharedPreferences mpref; 
SharedPreferences.Editor ed; 
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 

TextView checkIn, checkout, number_of_persons_text, number_of_room_text; 
LinearLayout hotel_list_back_image; 
boolean isLoading = false; 

Bundle translateBundle; 
int count, Page_inc = 1; 
int next; 

@TargetApi(Build.VERSION_CODES.M) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_hotel_list_activity); 
    global = (Global) getApplicationContext(); 
    mpref = getSharedPreferences("com.example.brightroots.flight_app", Context.MODE_PRIVATE); 
    init(); 

    startAnim(); 
    GetHotel(); 

    //initList(); 

    hotel_list.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView arg0, int scrollState) { 
      // If scroll state is touch scroll then set userScrolled 
      // true 
      if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { 
       isLoading = true; 

      } 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
          int visibleItemCount, int totalItemCount) { 
      // Now check if userScrolled is true and also check if 
      // the item is end then update list view and set 
      // userScrolled to false 
      if (isLoading 
        && firstVisibleItem + visibleItemCount == totalItemCount) { 

       isLoading = false; 
       loadMore(); 

      } 
     } 
    }); 


} 



private void loadMore() { 
    Log.e("count_value", count + ""); 
    Log.e("count_Page", Page_inc + ""); 
    Page_inc = 2; 
    if (Page_inc <= count) { 
     GetHotel(); 
     Log.e("countttttttt_gg", Page_inc + ""); 
     Page_inc = Page_inc + 1; 
     Log.e("Page_iceeee", Page_inc + ""); 

     isLoading = false; 
    } else { 
    /* Page_inc=1; 
     GetHotel();*/ 

    } 

} 

//================================================================================= findviewbyid 
private void init() { 
    hotel_list = (ListView) findViewById(R.id.hotel_list_list_view); 
    checkIn = (TextView) findViewById(R.id.Enter_date1); 
    checkout = (TextView) findViewById(R.id.Enter_date2); 
    number_of_persons_text = (TextView) findViewById(R.id.number_of_persons_text); 
    number_of_room_text = (TextView) findViewById(R.id.number_of_room_text); 
    hotel_list_back_image = (LinearLayout) findViewById(R.id.hotel_list_back_image); 
    number_of_persons_text.setText(mpref.getString("adult", "")); 
    number_of_room_text.setText(mpref.getString("room", "")); 
    hotel_list_back_image.setOnClickListener(this); 

    String date = mpref.getString("checkin", ""); 

    String date_out = mpref.getString("checkout", ""); 

    DateFormat targetFormat = new SimpleDateFormat("MMM dd,yyyy"); 
    DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Date d = null; 
    Date dd = null; 
    try { 
     d = originalFormat.parse(date); 
     dd = originalFormat.parse(date_out); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    String formattedDate = targetFormat.format(d); // 201208 
    String formattedDate1 = targetFormat.format(dd); // 201208 
    Log.e("Change format", formattedDate); 
    Log.e("Change format", formattedDate1); 

    checkIn.setText(formattedDate); 

    checkout.setText(formattedDate1); 

} 


//========================================================================================hotel name 
private void GetHotel() { 
    String url = "http://api.wego.com/hotels/api/search/show/" + global.getSearch() + "?currency_code=" + mpref.getString("currency_code", "") + "&page=" + Page_inc + "&refresh=true&key=12345&ts_code=123"; 

    Log.e("show", url); 


    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        // Log.e("Response_____>>", response); 
        stopAnim(); 
        JSONObject job = null; 

        try { 
         job = new JSONObject(response); 
         String totalcount = job.getString("total_count"); 
         count = Integer.parseInt(job.getString("count")); 
         String current_page = job.getString("current_page"); 

         JSONArray jo = job.getJSONArray("hotels"); 
         // Log.e("hhhh", "hhhh"); 
         ; 
         for (int i = 0; i < jo.length(); i++) { 
          JSONObject obj = jo.getJSONObject(i); 
          HashMap<String, String> hmap = new HashMap<String, String>(); 


          hmap.put("id", obj.getString("id")); 
          hmap.put("name", obj.getString("name")); 
          hmap.put("address", obj.getString("address")); 
          hmap.put("image", obj.getString("image")); 
          hmap.put("stars", obj.getString("stars")); 
          //dataItems.add(String.valueOf(hmap)); 
          list.add(hmap); 


         } 
         Log.e("dataItemmmmm", list + ""); 
         global.sethoteldetail(list); 
         // adapter = new Hotel_List_adapter(Hotel_list_activity.this, list); 
         hotel_list.setAdapter(new Hotel_List_adapter(Hotel_list_activity.this, list)); 


        } catch (JSONException e1) { 
         e1.printStackTrace(); 
         stopAnim(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // Log.e("Response ERROR_____>>", error.toString()); 
        stopAnim(); 
        //pdia.dismiss(); 
        Toast.makeText(Hotel_list_activity.this, "No Internet Connection", Toast.LENGTH_SHORT).show(); 


       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      return params; 
     } 
    }; 

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

Adaptateur personnalisé

public class Hotel_List_adapter extends BaseAdapter { 
Context c; 
ArrayList<HashMap<String, String>> list; 
LayoutInflater inflater; 
public Hotel_List_adapter(Context c, ArrayList<HashMap<String, String>> list) { 
    this.c=c; 
    this.list=list; 
    inflater=LayoutInflater.from(c); 

} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Holder holder = new Holder(); 
    if (convertView == null) { 

     convertView = inflater.inflate(R.layout.custom_hotel_list,null); 
     holder.name=(TextView)convertView.findViewById(R.id.name); 
     holder.address =(TextView)convertView.findViewById(R.id.address); 
     holder.img=(ImageView) convertView.findViewById(R.id.img); 

     convertView.setTag(holder); 

    } else { 
     holder = (Holder) convertView.getTag(); 
    } 

    holder.name.setText(list.get(position).get("name")); 
    holder.address.setText(list.get(position).get("address")); 
    String image_string = list.get(position).get("image");//stars 
    if (image_string.equalsIgnoreCase("null")){ 
     Log.e("no imG", "NO"); 
     holder.img.setImageResource(R.drawable.no_image); 
    } 
    else 
    { 
     Glide.with(c).load(image_string).into(holder.img); 
    } 

    return convertView; 
} 

class Holder 
{ 
    TextView name, address; 

} 

}

Répondre

0

Que voulez-vous? Vous voulez faire défiler Liste après mise à jour Liste atteinte au sommet pas au même état de liste? Est ce bien?

S'il vous plaît Vérifiez this

private void scrollMyListViewToBottom() { 
    myListView.post(new Runnable() { 
     @Override 
      public void run() { 
      // Select the last row so it will scroll into view... 
      myListView.setSelection(myListAdapter.getCount() - 1); 
     } 
    }); 
} 

vérifier ce S'il vous plaît.

+0

oui @ Pawandeep –

+0

avez-vous vérifié lien @pan –

+0

oui. Je vais essayer @ Pawandeep –