2013-11-09 2 views
0

Мой onScrollListener, кажется, никогда не называется. Я рассказал о нескольких других учебниках и встроил onscrolllistener в свой ArrayAdapter. Однако он не регистрирует события.Мой OnScrollListener не вызывается, какой код отсутствует?

Я следил за этим грубым форматом, который работал на него и с советами его комментаторов, но я не мог этого понять.

Отсутствует код?

package com.example.android.navigationdrawerexample; 

    import android.content.Context; 
    import android.graphics.Typeface; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AbsListView; 
    import android.widget.AbsListView.OnScrollListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.ImageView; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import com.nostra13.universalimageloader.core.ImageLoader; 
    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 

    import java.util.ArrayList; 

    public class ArticleAdapter extends ArrayAdapter<Article> implements OnScrollListener{ 

// declaring our ArrayList of items 
private ArrayList<Article> objects; 

/* here we must override the constructor for ArrayAdapter 
* the only variable we care about now is ArrayList<Item> objects, 
* because it is the list of objects we want to display. 
*/ 
public ArticleAdapter(Context context, int textViewResourceId, ArrayList<Article> objects) { 
    super(context, textViewResourceId, objects); 
    this.objects = objects; 


} 

public View getView(int position, View convertView, ViewGroup parent){ 

    // assign the view we are converting to a local variable 
    View v = convertView; 

    // first check to see if the view is null. if so, we have to inflate it. 
    // to inflate it basically means to render, or show, the view. 
    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.article_button, parent, false); 
    } 

    /* 
    * i refers to the current Item object. 
    */ 
    Article i = objects.get(position); 

    if (i != null) { 

     TextView heading = (TextView) v.findViewById(R.id.heading); 
     // check to see if each individual textview is null. 
     // if not, assign some text! 
     if (heading != null){ 
      heading.setText(i.getHeading()); 
     } 

     ImageView featuredimage = (ImageView) v.findViewById(R.id.featuredimage); 
     String imageUrl = i.getImageurl(); 
     ImageLoader imageLoader = ImageLoader.getInstance(); 
     imageLoader.init(ImageLoaderConfiguration.createDefault(this.getContext())); 
     imageLoader.displayImage(imageUrl, featuredimage); 

     Typeface museo = Typeface.createFromAsset(getContext().getAssets(),"fonts/Museo_Slab_500.otf"); 
     heading.setTypeface(museo); 
     heading.setTextSize(25); 
    } 
    // the view must be returned to our activity 
    return v; 
} 

public void onScroll(AbsListView arg0, int firstVisibleItem, 
        int visibleItemCount, int totalItemCount) { 
    Log.v("entered onScroll", " " + firstVisibleItem + visibleItemCount 
      + totalItemCount); 
    if (((firstVisibleItem + visibleItemCount) >= totalItemCount - 1)) { 
     Log.v("entered if", " " + firstVisibleItem + visibleItemCount 
       + totalItemCount); 
     // if we're at the bottom of the listview, load more data 
     addData(totalItemCount, 10); 
    } 
} 

private void addData(int totalItemCount, int productId) { 

    Toast.makeText(getContext(), "last item", Toast.LENGTH_SHORT).show(); 
} 

public void onScrollStateChanged(AbsListView arg0, int arg1) { 

} 

} 

ответ

0

Это потому, что вы только что внедрили интерфейс, и на нем не установлен прослушиватель. Вам нужно установить слушателя, указав listview.setOnScrollListener (это). Моя рекомендация заключалась бы в создании отдельного класса, который реализует onscrolllisetner, и этот объект класса передается в listview.setonscrolllisetener (новый MyScrollListener());

Надеюсь, это поможет.

+0

Спасибо, я понял это в базовом смысле, но мне было интересно, где именно в коде я реализую этот метод (listview.setOnscrollListe ...), так как я не объясняю, что вы имеете дело с списком в любом месте ... Еще раз спасибо. Я попробовал, где создается список, но нет такой удачи. – bungleofsketches

+0

Итак, я также попытался реализовать 'ListView list = (ListView) findViewById (android.R.id.list); list.setOnScrollListener (this); 'в конструкторе адаптера выше, и он не может найти метод' findViewById' (и он правильно написан и т. Д.) – bungleofsketches

+0

Dude .. dont find listview в вашем адаптере. Если вы используете listfragment, тогда это метод, называемый getListView(). Это вернет объект listview, и вы можете установить onscrolllistener на этот объект, как указано в ответе выше. –

Смежные вопросы