OnScrollListener不是定制的ListView适配器内部工作 [英] OnScrollListener not working inside custom ListView Adapter
本文介绍了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,长ID){
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屋!
查看全文