我有一個GridView
與一些項目,我用一個自定義適配器,延伸BaseAdapter
。每行顯示可下載的項目,每行都有一個顯示下載進度的圖標。Android GridView getChildAt(0).findViewById()返回null
所以我需要更新這個圖標。
對於此次更新,我知道我可以更改數據並致電notifyDataChanged()
,並且視圖將會更新,但是這種方法花費了很多變更,我不想這樣做。
所以我試圖從gridview
得到一個特定的孩子,找到這個圖標並更改圖標,但返回的視圖爲空。
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
不爲空,但mDownloadButton
爲空。
任何幫助,將不勝感激。
更新:
@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;
}
更新2:
我的適配器實現StickyGridHeadersBaseAdapter有時這讓我重複ID錯誤,所以我設置mGridView.setId(-1);
請發佈getVIew方法 –
@SergeyShustikov,請參閱最新的問題。 – mehdok
我認爲'getChildAt(0)'返回**不是一行**對象。需要調試並看到。 –