gpt4 book ai didi

Android GridView getChildAt(0).findViewById() 返回 null

转载 作者:行者123 更新时间:2023-11-30 02:04:18 25 4
gpt4 key购买 nike

我有一个包含一些项目的 GridView,我使用了一个扩展 BaseAdapter 的自定义适配器。每行显示一个可下载的项目,每行都有一个显示下载进度的图标。

所以我需要更新这个图标。

对于这次更新,我知道我可以更改数据并调用 notifyDataChanged() 并且 View 将得到更新,但是这种方法花费了我很多更改而且我不想这样做。

所以我试图从 gridview 中获取一个特定的 child ,找到这个图标并更改图标,但返回的 View 为空。

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);

最佳答案

您可以使用 getItemIdAtPosition 将 id 与 header 的 id 进行比较。如果它不是标题,它应该是包含您的内容的 View 。

long id = mGridView.getItemIdAtPosition(i);
if (id != StickyGridHeadersBaseAdapterWrapper.ID_HEADER) {
// you now know that this item is not a header.
View v = mGridView.getChildAt(i);
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");
}
}

他们在 source 中这样做StickyGridHeadersGridView 来查找标题,因此它也应该可以找到不是标题的内容。

关于Android GridView getChildAt(0).findViewById() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com