@replicate
нет такой силы, чтобы нас победила

Как заставить ListView подгружать items при прокрутке вниз?

Есть Json-файл, который надо загрузить в ListView, но надо только чтобы загрузилось первые 10 элементов в него, а при прокрутке вниз, отображались следующие 10 элементов. Поначалу загружаются 10 первых элементов, а потом резко идет 91-й элемент и он повторяется 9 раз
public class MainActivity extends Activity implements download_complete {

	public ListView list;
    public static  ArrayList<Articles> countries = new ArrayList<Articles>();
    public static ListAdapter adapter;
    public static int clicked;
	boolean isLoading=false;
	int next;
	Articles add;
	JSONObject obj2;
	JSONArray data_array;


	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		list = (ListView) findViewById(R.id.list);			
		adapter = new ListAdapter(this);

		
		Download_data download_data = new Download_data((download_complete) this);
		download_data.download_data_from_link("http://jsonplaceholder.typicode.com/posts");

		list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
									long id) {


                Intent intent = new Intent(MainActivity.this, Article.class);
                startActivity(intent);
                clicked = position;


			}
		});
		list.setOnScrollListener(new AbsListView.OnScrollListener(){

			@Override

			public void onScrollStateChanged(AbsListView view, int scrollState) {

				// Ignore this method

			}



			@Override

			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

				Log.i("Main",totalItemCount+"");



				int lastIndexInScreen = visibleItemCount + firstVisibleItem;



				if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
				{
					if(isLoading == false)
					{
						isLoading = true;
						loadMore();
					}
				}
				adapter.notifyDataSetChanged();


			}

		});
		list.setAdapter(adapter);
	}




	public void get_data(String data)
	{

		try {
			int i;
			 data_array=new JSONArray(data);



			for ( i=0 ; i <=10 ; i++) {

					JSONObject obj = new JSONObject(data_array.get(i).toString());

				 add = new Articles();
				add.title = obj.getString("title");
				add.body = obj.getString("body");




					countries.add(add);


				}
				next=i;



			adapter.notifyDataSetChanged();

		} catch (JSONException e) {
			e.printStackTrace();
		}

	}
	public void loadMore() {

		int i;
		try {


			if (countries.size() <= 90) { // Limit the number of items to 100 (stop loading when reaching 100 items)

				for (i = next; i <= next +9; i++)
					obj2 = new JSONObject(data_array.get(i).toString());
					add.title = obj2.getString("title");
					add.body = obj2.getString("body");
					countries.add(add);

				// Notify the ListView of data changed

				adapter.notifyDataSetChanged();

				isLoading = false;

				// Update next

				next = i;

			}


		} catch (JSONException e) {
			e.printStackTrace();
		}
	}

	}


Получается вот что:
5cb2f04413004009122988.gif

Что я делаю не так?
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 1
@SeaBreeze876
Front-end разработчик
for (i = next; i <= next +9; i++)
    obj2 = new JSONObject(data_array.get(i).toString());
    add.title = obj2.getString("title");
    add.body = obj2.getString("body");
    countries.add(add);

этот код очевидно некорректен
рекомендую почаще жать комбинацию ctrl+alt+l, и таких ошибок будет меньше
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы