Android GridView getChildAt (0) .findViewById () gibt null zurück

Ich habe einGridView Bei einigen Elementen habe ich einen benutzerdefinierten Adapter verwendet, der @ erweiterBaseAdapter. Jede Zeile zeigt ein herunterladbares Element an. Jede Zeile hat ein Symbol, das den Fortschritt des Herunterladens anzeigt.

So muss ich dieses Symbol aktualisieren.

Für dieses Update weiß ich, dass ich die Daten ändern und @ anrufen kanotifyDataChanged() und die Ansicht wird aktualisiert, aber dieser Ansatz kostet mich viele Änderungen und ich möchte dies nicht tun.

So habe ich versucht, ein bestimmtes Kind aus dem @ zu bekommgridview, finde dieses Symbol und ändere das Symbol. Die zurückgegebene Ansicht ist jedoch null.

View v = mGridView.getChildAt(0);
if(v != null)
{
    ImageButton mDownloadButton = (ImageButton)v.findViewById(R.id.download_icon_button);
    if(mDownloadButton != null)
        updateDownloadIcon(mDownloadButton, intent.getIntExtra(DATA.EXTRA_DOWNLOAD_PROGRESS, 0));
    else
        Log.e(TAG, "null image button");
}

v ist nicht null abermDownloadButton ist Null

Jede Hilfe wäre dankbar.

Aktualisieren

@Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        if(convertView == null)
        {
            LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.all_book_frag_item_layout, null);
        }

        mBookCoverImageView = (ImageView)convertView.findViewById(R.id.bookCoverID);
        mBookNameTextView = (TextView)convertView.findViewById(R.id.bookNameID);
        mBookWriterTextView = (TextView)convertView.findViewById(R.id.bookWriterID);
        mBookOtherInfoTextView = (TextView)convertView.findViewById(R.id.bookInfoID);
        mAudioImageView = (ImageView)convertView.findViewById(R.id.audio_image);
        mVideoImageView = (ImageView)convertView.findViewById(R.id.video_image);
        mDownloadButton = (ImageButton)convertView.findViewById(R.id.download_icon_button);
        mBookSize = (TextView)convertView.findViewById(R.id.download_size);
        mBookNameInCover = (TextView)convertView.findViewById(R.id.bookNameInCover);

        sectionRow = getSectionRow(position);

        if(!mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmBookCover().equals(""))
        {
            imageLoader.DisplayImage(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmBookCover(), mBookCoverImageView);
            mBookNameInCover.setText("");
        }
        else
        {
            mBookCoverImageView.setImageResource(R.drawable.trans_icon);
            mBookNameInCover.setText(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmPostTitle());
        }

        mBookNameTextView.setText(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmPostTitle());
        mBookWriterTextView.setText(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmAuthorName());
        mBookOtherInfoTextView.setText(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getCatString());
        mBookSize.setText(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmEpubSize());

        if(isBookDownloaded(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).getmPostId()))
        {
            mDownloadButton.setImageResource(R.drawable.download_icon_90_100);
        }
        else
        {
            mDownloadButton.setImageResource(R.drawable.download_icon);
        }

        if(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).ismSound())
        {
            mAudioImageView.setVisibility(View.VISIBLE);
        }
        else
        {
            mAudioImageView.setVisibility(View.INVISIBLE);
        }

        if(mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]).ismVideo())
        {
            mVideoImageView.setVisibility(View.VISIBLE);
        }
        else
        {
            mVideoImageView.setVisibility(View.INVISIBLE);
        }

        if(mSelectsItems[sectionRow[0][0]][sectionRow[1][0]])
        {
            convertView.findViewById(R.id.allBookBaseLayout).setBackgroundResource(R.color.selection_color);
        }
        else
        {
            convertView.findViewById(R.id.allBookBaseLayout).setBackgroundResource(R.drawable.book_view_one_column_item_background);
        }

        mDownloadButton.setOnClickListener(new DownloadClickListener(mDownloadButton, mHeaderInfo.get(sectionRow[0][0]).getmBooksInCat().get(sectionRow[1][0]), position));

        return convertView;
    }

Update 2:

Mein Adapter implementiert StickyGridHeadersBaseAdapter und manchmal dies gib mir doppelte ID Fehler, so dass ichmGridView.setId(-1);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage