我遇到了问题而且我真的找不到导致它的原因。
我有一个包含4种项目类型的ListView(getViewTypeCount()返回4)。视图类型0,1和3工作正常。但是,View类型2的问题是只绘制了一些类型为2的项目。表示类型2的视图是ViewPager。
绘制的ViewPagers完美无缺。未绘制的ViewPagers,只显示白色。当我尝试滚动浏览ViewPager时,它会在侧面显示蓝色光晕,以显示您位于第一页或最后一页。每次页面的数量都是正确的。
ViewPager包含一个NormalSectionFragment,其余的ViewPager是每页PhotoSectionFragments上都有照片的页面。
我确信有几件事:
我可以通过编程方式向下滚动和备份来解决它,但我不认为这是解决问题的正确方法。
getItemViewType方法:
@Override
public int getItemViewType(int position) {
NieuwsItem item = getItem(position);
if (item instanceof NormalNieuwsItem)
return VIEW_TYPE_NORMAL;
else
if (item instanceof TeaserNieuwsItem)
return VIEW_TYPE_TEASER;
else
return ((FacebookNieuwsItem) item).isPhoto() ? VIEW_TYPE_FACEBOOK_PHOTO : VIEW_TYPE_FACEBOOK;
}
这是列表适配器的getView()方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
NieuwsItem item = getItem(position);
switch (getItemViewType(position)) {
case 0:
if (convertView == null)
convertView = LayoutInflater.from(context).inflate(R.layout.listitem_nieuwsitem, null);
TextView titleView = (TextView) convertView.findViewById(R.id.titleView);
TextView subTitleView = (TextView) convertView.findViewById(R.id.subTitleView);
titleView.setText(item.getTitle());
subTitleView.setText(item.getSubTitle());
TextView createdAtView = (TextView) convertView.findViewById(R.id.createdAtView);
createdAtView.setText(Tools.getDateString(getContext(), ((NormalNieuwsItem) item).getCreatedAt()));
return convertView;
case 1:
if (convertView == null)
convertView = LayoutInflater.from(context).inflate(R.layout.listitem_teaseritem, null);
TextView teaserTitleView = (TextView) convertView.findViewById(R.id.teaserTitle);
ImageView teaserImageView = (ImageView) convertView.findViewById(R.id.teaserImage);
teaserTitleView.setText(item.getTitle());
Bitmap bmp = ((TeaserNieuwsItem) item).getImage();
if (bmp != null)
teaserImageView.setImageBitmap(bmp);
return convertView;
case 2:
FacebookNieuwsItem fbPhotoItem = (FacebookNieuwsItem) item;
if (convertView == null)
convertView = LayoutInflater.from(context).inflate(R.layout.listitem_facebookitem_photo, null);
ViewPager pager = (ViewPager) convertView.findViewById(R.id.facebookPhotoPager);
PhotoPagerAdapter adapter = new PhotoPagerAdapter(fm, fbPhotoItem);
pager.setAdapter(adapter);
pager.setPageMargin(-40);
pager.setCurrentItem(0, true);
pager.setOffscreenPageLimit(5);
return convertView;
case 3:
FacebookNieuwsItem fbItem = (FacebookNieuwsItem) item;
convertView = LayoutInflater.from(context).inflate(R.layout.listitem_facebookitem, null);
TextView content = (TextView) convertView.findViewById(R.id.facebook_content);
TextView likeCount = (TextView) convertView.findViewById(R.id.facebook_likecount);
TextView commentCount = (TextView) convertView.findViewById(R.id.facebook_commentcount);
TextView createdAt = (TextView) convertView.findViewById(R.id.facebook_date);
if (fbItem.isPhoto())
content.setText(fbItem.getTitle());
else
content.setText(fbItem.getContent());
likeCount.setText(Integer.toString(fbItem.getLikeCount()));
commentCount.setText(Integer.toString(fbItem.getCommentCount()));
createdAt.setText(Tools.getDateString(getContext(), fbItem.getCreatedAt()));
return convertView;
default:
return null;
}
}
ViewPager适配器:
public class PhotoPagerAdapter extends FragmentStatePagerAdapter {
private FacebookNieuwsItem item;
public PhotoPagerAdapter(FragmentManager fm, FacebookNieuwsItem item) {
super(fm);
this.item = item;
}
@Override
public Fragment getItem(int i) {
Fragment fragment;
if (i == 0)
fragment = NormalSectionFragment.newInstance(item);
else {
String url = Tools.PHOTO_URL_PREFIX + item.getPhoto(i - 1) + Tools.PHOTO_URL_SUFFIX;
fragment = PhotoSectionFragment.newInstance(url);
}
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return Integer.toString(position);
}
@Override
public int getCount() {
return item.getPhotoCount() + 1;
}
}
PhotoSectionFragment:
public static class PhotoSectionFragment extends Fragment {
private ImageView image;
private String url;
public static PhotoSectionFragment newInstance(String url) {
PhotoSectionFragment fragment = new PhotoSectionFragment();
fragment.setUrl(url);
return fragment;
}
private void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public PhotoSectionFragment() {
}
public void setImage(Bitmap bmp) {
Bitmap scaled = Bitmap.createScaledBitmap(bmp, 100, 60, true);
bmp.recycle();
image.setImageBitmap(scaled);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("photo_oncreateview_start", "url: " + url);
View view = inflater.inflate(R.layout.fb_photo_item, null);
image = (ImageView) view.findViewById(R.id.facebookPhoto);
return view;
}
}
NormalSectionFragment:
public static class NormalSectionFragment extends Fragment {
private FacebookNieuwsItem item;
public NormalSectionFragment() {
}
public static NormalSectionFragment newInstance(FacebookNieuwsItem item) {
NormalSectionFragment section = new NormalSectionFragment();
section.setItem(item);
return section;
}
private void setItem(FacebookNieuwsItem item) {
this.item = item;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("reg_oncreateview_start", item.getTitle());
View view = inflater.inflate(R.layout.listitem_facebookitem_viewpager, null);
TextView content = (TextView) view.findViewById(R.id.facebook_content);
TextView likeCount = (TextView) view.findViewById(R.id.facebook_likecount);
TextView commentCount = (TextView) view.findViewById(R.id.facebook_commentcount);
TextView createdAt = (TextView) view.findViewById(R.id.facebook_date);
content.setText(item.getTitle());
likeCount.setText(Integer.toString(item.getLikeCount()));
commentCount.setText(Integer.toString(item.getCommentCount()));
createdAt.setText(DateTimeUtils.getInstance(getActivity()).getTimeDiffString(item.getCreatedAt().getTimeInMillis()));
view.setClickable(true);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
((MainActivity) getActivity()).requestNieuwsDetailPage(item);
}
});
return view;
}
}
答案 0 :(得分:0)
我通过使用普通视图而不是片段来修复它。不知道有可能