1

У меня есть ArrayAdapter, который реализует OnScrollListener. Метод OnScroll называется много раз, чаще, чем раз в большую часть времени. Теперь OnScrollChangedState никогда не вызывается, и я понятия не имею, почему нет. Я читал, когда ему позвонили, и я не получаю такого поведения. Вот мой кодOnScrollChangedState не называется

@Override 
public void onActivityCreated(Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 
    /* Some code */ 
    setNewListAdapter() 
    getListView().setOnScrollListener(movieListAdapter); 



}  








public class MovieListAdapter extends ArrayAdapter<Movie> implements AbsListView.OnScrollListener{ 

    private ImageView thumbnail; 
    private TextView title; 
    private RatingBar ratingBar; 
    private int currentFirstVisibleItem; 
    private int currentVisibleItemCount; 
    private int currentScrollState; 
    private int totalItemCount; 


    public MovieListAdapter(Context context, ArrayList<Movie> movies) { 
     super(context, 0, movies); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     Movie movie = getItem(position); 
     // Check if an existing view is being reused, otherwise inflate the view 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.movie_list, parent, false); 
     } 
     // Lookup view 
     thumbnail = (ImageView) convertView.findViewById(R.id.film_cover); 
     title = (TextView) convertView.findViewById(R.id.movieTitle); 
     ratingBar = (RatingBar) convertView.findViewById(R.id.ratingBar); 
     // Populate the views 
     new ImageLoader(movie.getPoster_path(),thumbnail).execute(); 
     title.setText(movie.getTitle()); 
     ratingBar.setRating((float)movie.getVote_average()); 

     // Return the completed view to render on screen 
     return convertView; 
    } 

    private void updateData(){ 

     this.clear(); 

     for(Movie m : movieArrayList){ 
      this.insert(m,this.getCount()); 
     } 
    } 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     this.currentScrollState = scrollState; 
     this.isScrollCompleted(); 
    } 

    /* Detect if the scroll has been completed*/ 
    private void isScrollCompleted() { 

     final int lastItem = currentFirstVisibleItem + currentVisibleItemCount; 

     if (this.currentScrollState == SCROLL_STATE_IDLE && lastItem == totalItemCount) { 
      listener.nextPage(++currentPage); 
      updateData(); // Refresh Movies List 
     } else if (this.currentScrollState == SCROLL_STATE_IDLE && (currentFirstVisibleItem + totalItemCount == totalItemCount)) { 
      listener.previousPage(--currentPage); 
      updateData(); // Refresh Movies List 
     } 

    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     this.currentFirstVisibleItem = firstVisibleItem; 
     this.currentVisibleItemCount = visibleItemCount; 
     this.totalItemCount = totalItemCount; 
    } 
} 

Спасибо заранее, ребята. Любая обратная связь оценена

ответ

1

Я предполагаю, что вы совершили логическую ошибку здесь, можете ли вы попробовать заменить ниже, и проверить, работает ли она?

lastItem == totalItemCount 

в

lastItem == totalItemCount - 1 

и Аналогичным образом замените

currentFirstVisibleItem + totalItemCount == totalItemCount 

в

currentFirstVisibleItem + totalItemCount == totalItemCount - 1 
+0

Нет у меня это право. Проблема не в этом. Это обратный вызов android, который не работает правильно. – Greggz

+0

Итак, вы пытались помещать журнал вне условий в функцию onScrollStateChange, вы уверены, что правильно? – himanshu1496

+0

Метод IsScrollCompleted() даже не вызывается, потому что OnStateChanged не так. – Greggz