如何在android中实现Scroll Listener

时间:2016-12-08 09:54:08

标签: android listview android-studio android-volley onscrolllistener

我正在使用OnScrolListener将项目添加到我的应用程序中的ListView .Scrolling工作正常,但我遇到了错误。当我滚动到底部,数据添加到列表,但位置从顶部开始。请帮助我

 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);
}

自定义适配器

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;

}

}

1 个答案:

答案 0 :(得分:0)

你想要什么?您想要在更新列表后滚动列表它是否在顶部而不是在同一列表状态?是对的吗?

请检查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);
        }
    });
}

请检查此。