OnScrollListener不是定制的ListView适配器内部工作 [英] OnScrollListener not working inside custom ListView Adapter

查看:192
本文介绍了OnScrollListener不是定制的ListView适配器内部工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要赶上我滚动的ListView定制适配器内部事件,因此我在它实施OnScrollListener,但其方法不会被调用。我到处找一个答案,但没有任何运气,没有错误概莫能外。

有什么地方出错了?

ListView控件适配器:

 进口的java.util.ArrayList;
进口android.app.Activity;
进口android.content.Context;
进口android.text.Editable;
进口android.text.TextWatcher;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.View.OnFocusChangeListener;
进口android.view.ViewGroup;
进口android.view.View.OnClickListener;
进口android.widget.AbsListView;
进口android.widget.AbsListView.OnScrollListener;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemSelectedListener;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.ImageView;
进口android.widget.Spinner;
    公共类PhotosListViewAdapter扩展ArrayAdapter< ImageItemsSetter>实现OnScrollListener {        DeleteImageListener dListener;
        私人上下文的背景下;
        私人诠释layoutResourceId;
        私人的ArrayList< ImageItemsSetter>数据=新的ArrayList< ImageItemsSetter>();        //标准构造
        公共PhotosListViewAdapter(上下文的背景下,诠释layoutResourceId,ArrayList的< ImageItemsSetter>数据){
            超级(上下文,layoutResourceId,数据);
            this.layoutResourceId = layoutResourceId;
            this.context =背景;
            this.data =数据;
        }        静态类ViewHolder {            公共ImageView的图;
            公众的EditText数量;
            公共微调微调;
            公共按钮删除;        }        @覆盖
        公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
            查看排= convertView;
            ViewHolder支架=无效;            ImageItemsSetter图像= data.get(位置);        如果(行== NULL){
            LayoutInflater充气=((活动)上下文).getLayoutInflater();
            行= inflater.inflate(layoutResourceId,父母,假);
            持有人=新ViewHolder();            holder.Img =(ImageView的)row.findViewById(R.id.Img);            holder.quantity =(EditText上)row.findViewById(R.id.quantity);
            // holder.quantity.addTextChangedListener(新GenericTextWatcher(holder.quantity));            holder.spinner =(微调)row.findViewById(R.id.photo_format);
            holder.delete =(按钮)row.findViewById(R.id.deleteImage);            row.setTag(保持器);
        }其他{
            支架=(ViewHolder)row.getTag();
        }         holder.Img.setImageBitmap(image.getTheImage());
         holder.quantity.setText(image.getQuantity());
        ArrayAdapter<&CharSequence的GT;适配器= ArrayAdapter.createFromResource(背景下,
                R.array.formats_array,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        holder.spinner.setAdapter(适配器);        //删除按钮
        holder.delete.setOnClickListener(新OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){                如果(dListener!= NULL){
                    dListener.onDelete pressed(位置);
                }
            }
            });        / *
        holder.spinner.setOnItemSelectedListener(新OnItemSelectedListener(){            @覆盖
            公共无效onItemSelected(适配器视图<>母公司,观景,
                    INT POS,长I​​D){
                dListener.onFormatChanged(parent.getItemAtPosition(POS)的ToString(),data.get(位置).getName());
            }            @覆盖
            公共无效onNothingSelected(适配器视图<>母公司){
                // TODO自动生成方法存根
            }        });        holder.quantity.addTextChangedListener(新TextWatcher(){               @覆盖
               公共无效afterTextChanged(编辑S){}               @覆盖
               公共无效beforeTextChanged(CharSequence中,诠释开始,
                 诠释计数后INT){}               @覆盖
               公共无效onTextChanged(CharSequence中,诠释开始,
                 INT之前,诠释计数){
                   dListener.onQuantityChanged(s.toString(),data.get(位置).getName());
                }
              });        * /        返回行;
        }
        //接口发送所选图像的位置删除
        公共无效setDeleteImageListener(DeleteImageListener监听){
            this.dListener =侦听器;
        }        公共静态界面DeleteImageListener {
            公共无效onDelete pressed(INT位置);
            公共无效onQuantityChanged(字符串数量,字符串名称);
            公共无效onFormatChanged(字符串格式,字符串名称);
        }        @覆盖
        公共无效onScrollStateChanged(AbsListView观点,诠释scrollState){
            // TODO自动生成方法存根
            的System.out.println(状态改为);
        }
        @覆盖
        公共无效onScroll(AbsListView观点,诠释firstVisibleItem,
                INT visibleItemCount,诠释totalItemCount){
            // TODO自动生成方法存根
            的System.out.println(scroleld);
        }    }


解决方案

您不是叫 setOnScrollListener(本)的任何地方。做它在构造函数中,它应该很好地工作: - )

在某处,code,你可能有这样的事情:

  PhotosListViewAdapter适配器=新PhotosListViewAdapter();
someListView.setAdapter(适配器);

添加

  someListView.setOnScrollListener(适配器);

I need to catch scrolling events inside my custom ListView Adapter, so I have implemented OnScrollListener in it, but its methods are not being called. I was looking everywhere for an answer but without any luck, no errors no exceptions.

What could be wrong?

ListView Adapter:

import java.util.ArrayList;


import android.app.Activity;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner; 


    public class PhotosListViewAdapter extends ArrayAdapter<ImageItemsSetter> implements OnScrollListener {

        DeleteImageListener dListener;
        private Context context;
        private int layoutResourceId;
        private ArrayList<ImageItemsSetter> data = new ArrayList<ImageItemsSetter>();   

        //standard constructor
        public PhotosListViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItemsSetter> data) {
            super(context, layoutResourceId, data);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data = data;            
        }           

        static class ViewHolder {

            public ImageView Img; 
            public EditText quantity;
            public Spinner spinner;
            public Button delete;

        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View row = convertView;
            ViewHolder holder = null;            

            ImageItemsSetter image = data.get(position);

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder(); 

            holder.Img = (ImageView) row.findViewById(R.id.Img);

            holder.quantity = (EditText) row.findViewById(R.id.quantity);
            // holder.quantity.addTextChangedListener(new GenericTextWatcher(holder.quantity));           

            holder.spinner = (Spinner) row.findViewById(R.id.photo_format);
            holder.delete = (Button) row.findViewById(R.id.deleteImage);

            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag(); 
        }           

         holder.Img.setImageBitmap(image.getTheImage());            
         holder.quantity.setText(image.getQuantity());


        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context,
                R.array.formats_array, android.R.layout.simple_spinner_item);       
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);     
        holder.spinner.setAdapter(adapter);

        //The delete button
        holder.delete.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           

                if (dListener != null) {  
                    dListener.onDeletePressed(position); 
                }       
            }           
            });      

        /*
        holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener() {     

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int pos, long id) {                         
                dListener.onFormatChanged(parent.getItemAtPosition(pos).toString(), data.get(position).getName());              
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub              
            }

        });

        holder.quantity.addTextChangedListener(new TextWatcher() {

               @Override
               public void afterTextChanged(Editable s) { }

               @Override    
               public void beforeTextChanged(CharSequence s, int start,
                 int count, int after) {  }

               @Override    
               public void onTextChanged(CharSequence s, int start,
                 int before, int count) {
                   dListener.onQuantityChanged(s.toString(), data.get(position).getName());
                }
              });

        */

        return row;
        }




        //Interface to send selected image's position for deletion
        public void setDeleteImageListener(DeleteImageListener listener) {  
            this.dListener = listener;  
        } 

        public static interface DeleteImageListener { 
            public void onDeletePressed(int position);
            public void onQuantityChanged(String quantity, String name);
            public void onFormatChanged(String format, String name);
        }

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub
            System.out.println("state changed");
        }


        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            System.out.println("scroleld");
        }               





    }

解决方案

You are not calling setOnScrollListener(this) anywhere. Do it in the constructor and it should work fine :-)

Somewhere in your code you probably have something like this:

PhotosListViewAdapter adapter = new PhotosListViewAdapter();
someListView.setAdapter(adapter);

Add

someListView.setOnScrollListener(adapter);

这篇关于OnScrollListener不是定制的ListView适配器内部工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆