Android 项listview中的子项的实现OnclickListener具有实现SectionIndexer

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) { //

我有一个ListView,我想用SectionIndexer实现fastscroll,每行项目有3个项目ImageView,如下所示:

我想为每个imageview 1、2、3实现onclicklistener,但是当我使用

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如果您解决了问题,将解决方案作为答案发布,以帮助未来的读者。