Android 项listview中的子项的实现OnclickListener具有实现SectionIndexer
我有一个ListView,我想用SectionIndexer实现fastscroll,每行项目有3个项目ImageView,如下所示: 我想为每个imageview 1、2、3实现onclicklistener,但是当我使用Android 项listview中的子项的实现OnclickListener具有实现SectionIndexer,android,fastscroll,sectionindexer,Android,Fastscroll,Sectionindexer,我有一个ListView,我想用SectionIndexer实现fastscroll,每行项目有3个项目ImageView,如下所示: 我想为每个imageview 1、2、3实现onclicklistener,但是当我使用 imageview1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //
imageview1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO here
}
});
这不起作用——我不知道为什么,如果你的听众没有被抓住
以下是我的适配器代码:
public class LazyImageLoadAdapter extends BaseAdapter implements SectionIndexer{
private Context _context;
private TopActivity _parentActivity;
private static LayoutInflater inflater=null;
public CoverBookLoader _coverBookLoader;
private ArrayList<RowBook> _arrListRowBooks;
private int sizeView;
public LazyImageLoadAdapter(Context context, ArrayList<RowBook> arrListRowBooks) {
this._context = context;
this._parentActivity = (TopActivity) context;
this.sizeView = _parentActivity.getScreenWidth();
this._arrListRowBooks = arrListRowBooks;
inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
_coverBookLoader = new CoverBookLoader(_context);
}
public int getCount() {
// return data.length;
return _arrListRowBooks.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder{
public LinearLayout llBook1;
public ImageView ivBookCover1;
public ProgressBar pbLoadingBookCover1;
public LinearLayout llBook2;
public ImageView ivBookCover2;
public ProgressBar pbLoadingBookCover2;
public LinearLayout llBook3;
public ImageView ivBookCover3;
public ProgressBar pbLoadingBookCover3;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holderBook;
LayoutParams lpSizeBook = new LayoutParams(sizeView / 3, sizeView * 3 / 5);
if(convertView==null){
vi = inflater.inflate(R.layout.listview_row, parent, false);
holderBook = new ViewHolder();
holderBook.llBook1 = (LinearLayout) vi.findViewById(R.id.llBook1);
holderBook.llBook1.setLayoutParams(lpSizeBook);
holderBook.ivBookCover1 = (ImageView) vi.findViewById(R.id.ivBookCover1);
holderBook.pbLoadingBookCover1 = (ProgressBar) vi.findViewById(R.id.pbLoadingCoverImageBook1);
holderBook.llBook2 = (LinearLayout) vi.findViewById(R.id.llBook2);
holderBook.llBook2.setLayoutParams(lpSizeBook);
holderBook.ivBookCover2 = (ImageView) vi.findViewById(R.id.ivBookCover2);
holderBook.pbLoadingBookCover2 = (ProgressBar) vi.findViewById(R.id.pbLoadingCoverImageBook2);
holderBook.llBook3 = (LinearLayout) vi.findViewById(R.id.llBook3);
holderBook.llBook3.setLayoutParams(lpSizeBook);
holderBook.ivBookCover3 = (ImageView) vi.findViewById(R.id.ivBookCover3);
holderBook.pbLoadingBookCover3 = (ProgressBar) vi.findViewById(R.id.pbLoadingCoverImageBook3);
vi.setTag( holderBook );
}
else {
holderBook=(ViewHolder)vi.getTag();
}
LinearLayout llBook1 = holderBook.llBook1;
llBook1.setLayoutParams(lpSizeBook);
ImageView ivBookCover1 = holderBook.ivBookCover1;
ProgressBar pbLoadingBookCover1 = holderBook.pbLoadingBookCover1;
LinearLayout llBook2 = holderBook.llBook2;
llBook2.setLayoutParams(lpSizeBook);
ImageView ivBookCover2 = holderBook.ivBookCover2;
ProgressBar pbLoadingBookCover2 = holderBook.pbLoadingBookCover2;
LinearLayout llBook3 = holderBook.llBook3;
llBook3.setLayoutParams(lpSizeBook);
ImageView ivBookCover3 = holderBook.ivBookCover3;
ProgressBar pbLoadingBookCover3 = holderBook.pbLoadingBookCover3;
RowBook rowBook = _arrListRowBooks.get(position);
if (rowBook.getSize() < 3) {
llBook3.setVisibility(View.VISIBLE);
}
if (rowBook.getSize() < 2) {
llBook2.setVisibility(View.VISIBLE);
}
if (rowBook != null) {
for (int i = 0; i < rowBook.getSize(); i++) {
switch (i) {
case 0:
addBook(rowBook.getBookAt(i), ivBookCover1, pbLoadingBookCover1);
break;
case 1:
addBook(rowBook.getBookAt(i), ivBookCover2, pbLoadingBookCover2);
break;
case 2:
addBook(rowBook.getBookAt(i), ivBookCover3, pbLoadingBookCover3);
break;
}
}
}
return vi;
}
private void addBook(Books book , ImageView ivBookCover, ProgressBar pbLoadingCoverImageBook){
ivBookCover.setImageResource(R.drawable.blank_book);
ivBookCover.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO here
}
});
JSONObject objBookTag = new JSONObject();
try {
objBookTag.put(Define.KEY_JSONOBJ_BOOK_ID, book.getId());
objBookTag.put(Define.KEY_JSONOBJ_BOOK_URL_THUMBNAIL, book.urlThumbnail);
ivBookCover.setTag(objBookTag);
} catch (JSONException e) {
e.printStackTrace();
ivBookCover.setTag("{\""+Define.KEY_JSONOBJ_BOOK_ID+"\":\"" + book.getId()+"\", \""+Define.KEY_JSONOBJ_BOOK_URL_THUMBNAIL+"\":\""+book.urlThumbnail+"\"");
}
_coverBookLoader.DisplayImage(book.urlThumbnail, ivBookCover, book.getId(), pbLoadingCoverImageBook);
}
private String[] mSections;
public void initSection(String[] sections){
mSections = sections;
}
@Override
public Object[] getSections() {
Log.d("ListView", "Get sections");
if (mSections != null) {
String[] sectionsArr = new String[mSections.length];
for (int i=0; i < mSections.length; i++) {
sectionsArr[i] = "" + mSections[i];
}
return sectionsArr;
}
return null;
}
@Override
public int getPositionForSection(int sectionIndex) {
if (mSections != null) {
Log.d("ListView", "Get position for section");
for (int i=0; i < this.getCount(); i++) {
if (mSections[sectionIndex].equals("" + i)) {
return i;
}
}
}
return 0;
}
@Override
public int getSectionForPosition(int position) {
Log.d("ListView", "Get section");
return 0;
}
}
正如我上面的评论回复,我的适配器没有故障,我的故障在我的自定义listview中:
public class IndexableListView extends ListView {
// TODO
@Override
/**
* intercept touch event - **WRONG HERE**
*/
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
// TODO
}
当我删除onInterceptTouchEvent时,我的问题就解决了postyor adapter Oncee每行包含多少行书,以及单行中包含多少图像。我无法正确理解你的逻辑。什么是需要再次获得的图像持有人。你已经有持有人在你的手。所以直接将holderBook.ivBookCover1传递给您的方法,rowbook是每行的保存数据,每个rowbook包含3个图书图像,等等。。。。holderBook是每行的重复使用布局,IVBookCover 1、IVBookCover 2、IVBookCover 3书籍的显示图像对不起,我的朋友,我发现了我的错误,没有在listview中获得项目的单击事件是因为我的自定义listview重写了InterceptTouchEvent上的方法。@atula9286如果您解决了问题,将解决方案作为答案发布,以帮助未来的读者。