通过适配器更新 GridView 项目导致项目之间发生冲突
Update GridView Items through Adapter causing conflict between items
我将 GridView 与 BaseAdapter 一起使用,当在 gridview 项目上按下下载时,下载按钮将消失,Circular Progress Drawable 将出现并开始进行,但这里的问题是项目何时下载,我滚动列表 Circular所有项目都出现了进展,这不是这些项目的真实状态,这是一张图片
第一个是真的,第二个是乱七八糟的,应该不会出现循环进度。
这是我的代码和适配器的 getView() 方法:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.book_item_to_download, parent, false);
convertView.setFocusable(true);
convertView.setClickable(true);
holderGridView = new BooksViewHolder();
holderGridView.BookImage = (ImageView) convertView.findViewById(R.id.bookBackground);
holderGridView.BookName = (TextView) convertView.findViewById(R.id.bookName);
holderGridView.BookItemWraper = (LinearLayout) convertView.findViewById(R.id.book_item_wraper);
holderGridView.BookDownload=(ImageView) convertView.findViewById(R.id.download);
holderGridView.BookProgress=(CircularProgressBar) convertView.findViewById(R.id.demo_mpc);
Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Isra-Thin.ttf");
holderGridView.BookName.setTypeface(custom_font);
convertView.setTag(holderGridView);
} else {
holderGridView = (BooksViewHolder) convertView.getTag();
}
holderGridView.BookItemWraper.setLayoutParams(new android.widget.AbsListView.LayoutParams((int) Math.round(ScreenWidth / 2.1), (int) Math.round(ScreenHeight / 2.5)));
holderGridView.BookImage.setImageDrawable(getResources().getDrawable(R.drawable.book_background));
holderGridView.BookName.setText(bookCovers.get(position).getBookTitle());
if (bookCovers.get(position).getBookImagePathOnDisk() != null && bookCovers.get(position).getBookImagePathOnDisk().contains("file://")) {
Picasso.with(mContext).load(bookCovers.get(position).getBookImagePathOnDisk()).into(holderGridView.BookImage);
} else if (bookCovers.get(position).getBookImagePathOnDisk()!= null) {
Picasso.with(mContext).load(new File(bookCovers.get(position).getBookImagePathOnDisk())).into(holderGridView.BookImage);
}
if(convertView.getId()==bookCovers.get(position).getBookID())
{
if(bookCovers.get(position).isDownloaded)
{
holderGridView.BookDownload.setVisibility(View.GONE);
holderGridView.BookProgress.setVisibility(View.GONE);
holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i=0;i<app.bis.size();++i)
{
if(app.bis.get(i).identifier.equals(bookCovers.get(position).getBookID()+""))
{
openBookViewer(app.bis.get(i));
break;
}
}
}
});
}
else if(bookCovers.get(position).isDownloading)
{
holderGridView.BookDownload.setVisibility(View.GONE);
holderGridView.BookProgress.setVisibility(View.VISIBLE);
holderGridView.BookProgress.setProgress(bookCovers.get(position).downloadProgress);
holderGridView.BookItemWraper.setOnClickListener(null);
}
else
{
holderGridView.BookDownload.setVisibility(View.VISIBLE);
holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent openDetails = new Intent(getActivity(), WaitingBookDetails_Activity.class);
openDetails.putExtra(Constants.BOOK_COVER, Parcels.wrap(bookCovers.get(position)));
startActivity(openDetails);
}
});
holderGridView.BookDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new downloadEPUB_Task(bookCovers.get(position),position).execute();
}
});
}
}
return convertView;
}
提前致谢
这个问题是因为视图的回收。
添加
holderGridView.BookProgress.setVisibility(View.GONE);
在你的外部 IF 条件之前
if(convertView.getId()==bookCovers.get(position).getBookID())
{
..
}
并设置
holderGridView.BookProgress.setVisibility(View.VSIBLE);
在那些 if 或 else 块中,您希望它显示的位置。
我将 GridView 与 BaseAdapter 一起使用,当在 gridview 项目上按下下载时,下载按钮将消失,Circular Progress Drawable 将出现并开始进行,但这里的问题是项目何时下载,我滚动列表 Circular所有项目都出现了进展,这不是这些项目的真实状态,这是一张图片
第一个是真的,第二个是乱七八糟的,应该不会出现循环进度。
这是我的代码和适配器的 getView() 方法:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.book_item_to_download, parent, false);
convertView.setFocusable(true);
convertView.setClickable(true);
holderGridView = new BooksViewHolder();
holderGridView.BookImage = (ImageView) convertView.findViewById(R.id.bookBackground);
holderGridView.BookName = (TextView) convertView.findViewById(R.id.bookName);
holderGridView.BookItemWraper = (LinearLayout) convertView.findViewById(R.id.book_item_wraper);
holderGridView.BookDownload=(ImageView) convertView.findViewById(R.id.download);
holderGridView.BookProgress=(CircularProgressBar) convertView.findViewById(R.id.demo_mpc);
Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Isra-Thin.ttf");
holderGridView.BookName.setTypeface(custom_font);
convertView.setTag(holderGridView);
} else {
holderGridView = (BooksViewHolder) convertView.getTag();
}
holderGridView.BookItemWraper.setLayoutParams(new android.widget.AbsListView.LayoutParams((int) Math.round(ScreenWidth / 2.1), (int) Math.round(ScreenHeight / 2.5)));
holderGridView.BookImage.setImageDrawable(getResources().getDrawable(R.drawable.book_background));
holderGridView.BookName.setText(bookCovers.get(position).getBookTitle());
if (bookCovers.get(position).getBookImagePathOnDisk() != null && bookCovers.get(position).getBookImagePathOnDisk().contains("file://")) {
Picasso.with(mContext).load(bookCovers.get(position).getBookImagePathOnDisk()).into(holderGridView.BookImage);
} else if (bookCovers.get(position).getBookImagePathOnDisk()!= null) {
Picasso.with(mContext).load(new File(bookCovers.get(position).getBookImagePathOnDisk())).into(holderGridView.BookImage);
}
if(convertView.getId()==bookCovers.get(position).getBookID())
{
if(bookCovers.get(position).isDownloaded)
{
holderGridView.BookDownload.setVisibility(View.GONE);
holderGridView.BookProgress.setVisibility(View.GONE);
holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i=0;i<app.bis.size();++i)
{
if(app.bis.get(i).identifier.equals(bookCovers.get(position).getBookID()+""))
{
openBookViewer(app.bis.get(i));
break;
}
}
}
});
}
else if(bookCovers.get(position).isDownloading)
{
holderGridView.BookDownload.setVisibility(View.GONE);
holderGridView.BookProgress.setVisibility(View.VISIBLE);
holderGridView.BookProgress.setProgress(bookCovers.get(position).downloadProgress);
holderGridView.BookItemWraper.setOnClickListener(null);
}
else
{
holderGridView.BookDownload.setVisibility(View.VISIBLE);
holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent openDetails = new Intent(getActivity(), WaitingBookDetails_Activity.class);
openDetails.putExtra(Constants.BOOK_COVER, Parcels.wrap(bookCovers.get(position)));
startActivity(openDetails);
}
});
holderGridView.BookDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new downloadEPUB_Task(bookCovers.get(position),position).execute();
}
});
}
}
return convertView;
}
提前致谢
这个问题是因为视图的回收。 添加
holderGridView.BookProgress.setVisibility(View.GONE);
在你的外部 IF 条件之前
if(convertView.getId()==bookCovers.get(position).getBookID())
{
..
}
并设置
holderGridView.BookProgress.setVisibility(View.VSIBLE);
在那些 if 或 else 块中,您希望它显示的位置。