рдзреАрдореА рд╕реВрдЪреА рд╕реЗ рдмрдбрд╝реА рд╕реВрдЪреА рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ HTTP рдЕрдиреБрд░реЛрдз), рдпрд╣ рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рдПрдХ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ (рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо, рд╕рдорд╛рдЪрд╛рд░ рд▓реЗрдЦ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛ рд╕реВрдЪреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рдЖрд▓реЗрдЦ
рд╕реВрдЪреА рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдг рдХреЗ
рдкрд╛рдж рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реВрдЪреА рдФрд░ рдЗрд╕рдХреЗ рдПрдбрд╛рдкреНрдЯрд░ рд╣реИрдВ, рдЬреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рддрддреНрд╡реЛрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд╣рд▓реЗ рдХреБрдЫ, рдпрд╛ рд╕рднреА) рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛
- рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ
- рд╕реВрдЪреА рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛
- рдЕрдЧрд▓реЗ рдкреЗрдЬ рдХреЛ рд╕реВрдЪреА рдПрдбреЙрдкреНрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
- рд╣рдо рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ
рдкрд╛рда "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ..." рдХреЗ рд╕рд╛рде
рдЕрдирд┐рд╢реНрдЪрд┐рддрдХрд╛рд▓реАрди рдФрд░
TextView рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рджреЛ
ProgressBar рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЖрдЙрдЯ xml рдмрдирд╛рдПрдБред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреНрд╖реИрддрд┐рдЬ LinearLayout рдореЗрдВ рд░рдЦреЗрдВред рдЖрдк рдмреВрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реВрдЪреА рджреГрд╢реНрдп рддреИрдпрд╛рд░ рдХрд░рдирд╛
рддреИрдпрд╛рд░ рд▓реЗрдЖрдЙрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ ListView рдХреЗ рд▓рд┐рдП рддрд╣рдЦрд╛рдиреЗ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред SetAdapter рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо рдХрд╛ рд▓рд┐рдВрдХ рд╕рд╣реЗрдЬрдирд╛ рди рднреВрд▓реЗрдВред
private LinearLayout mLoadingFooter; @Override protected void onCreate(Bundle savedInstanceState) { ... LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mLoadingFooter = (LinearLayout) layoutInflater.inflate(R.layout.loading, null); mList = (ListView) findViewById(R.id.list); mList.addFooterView(mLoadingFooter); ... }
рдЕрдЧрд▓реЗ рдкреЗрдЬ рдХреЛ рд╕реВрдЪреА рдПрдбреЙрдкреНрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдПрдбрд╛рдкреНрдЯрд░ рдХреЗ
getView рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдпрджрд┐ рд╕реВрдЪреА рдХреЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдмреВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрдВрдЯреЗрдВрдЯ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдлреЗрдВрдХрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди,
рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛
рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдПрдбреЗрдкреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
@Override public View getView(int position, View convertView, ViewGroup parent) { ... if (position == getCount() - 1 && hasNextPage()) { loadNextPage(); } }
UPD: grishkaa рдиреЗ
AbsListView.OnScrollListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕рд╣реА рддрд░реАрдХреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА:
mList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView arg0, int arg1) {} @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (visibleItemCount > 0 && firstVisibleItem + visibleItemCount == totalItemCount && hasNextPage()) { loadNextPage(); } } });
рд╣рдо рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЗрд░рд╛рджреЗ рдХреЛ рдЕрдирд╛рдо
рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд╕реАрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░
рд╣реИрдВрдбрд▓рд░ (рдпреВрдЖрдИ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдПрдбреЙрдкреНрдЯрд░ рдХреЗ
InformDataSetChanged рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░
рдкрд╛рдж рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
if (!hasNextPage() && mList.getFooterViewsCount() > 0) { mList.removeFooterView(mLoadingFooter); } mAdapter.notifyDataSetChanged();