Адаптер пейджера не отображает изображение после получения ответа от фрагмента
Я получаю три изображения от ответа, и я храню в arraylist, затем я пытаюсь установить в PagerAdapter, но ничего не отображается в моем плеере просмотра, следующий мой класс pageradapter, может ли кто-нибудь сказать, что я ошибаюсь
Я использую Fragment
В моем Postexecute я устанавливаю его в виде пейджера вроде этого
adapter = new ImageAdapter(All_Product_Details.this.getActivity());
viewPager.setAdapter(adapter);
}
ниже - мой адаптер, который я устанавливаю после асинтетики
public class ImageAdapter extends FragmentPagerAdapter {
Context context;
ImageAdapter(Context context)
{
this.context=context;
}
@Override
public int getCount() {
return multimglist.size();
}
@Override
public Fragment getItem(int i) {
return null;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
int padding = context.getResources().getDimensionPixelSize(
R.dimen.activity_horizontal_margin);
imageView.setPadding(padding, padding, padding, padding);
//imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
Picasso.with(context).load(multimglist.get(position)).into(imageView);
// imageView.setImageURI(Uri.parse(imgStr[position]));
((ViewPager) container).addView(imageView, 0);
return imageView;
}
}
Ответы
Ответ 1
this is my pager adapter change according that
public class LoginViewPagerCA extends PagerAdapter {
SparseArray<View> views = new SparseArray<>();
List<Viewpager_POJO> listofPersons;
LayoutInflater inflater;
Context context;
private int count = 4;
public LoginViewPagerCA(Context context, List<Viewpager_POJO> listofPersons) {
this.context = context;
this.listofPersons = listofPersons;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listofPersons.size();
}
public void setCount(int count) {
this.count = count;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
// TODO Auto-generated method stub
return view == ((LinearLayout) obj);
}
public void setData(ArrayList<Viewpager_POJO> data) {
listofPersons = data;
}
public Object instantiateItem(ViewGroup container, final int position)
{
final TextView txtFstName, txtLstName, txtRollno, txtArrTime, txtTimeLeft;
ImageView imgView;
final Viewpager_POJO rowperson = listofPersons.get(position);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View itemView = inflater.inflate(R.layout.landing_pager_item, container, false);
txtFstName = (TextView) itemView.findViewById(R.id.pager_big_tv);
txtLstName = (TextView) itemView.findViewById(R.id.pager_small_tv);
imgView = (ImageView) itemView.findViewById(R.id.pager_image);
try {
// txtCompn.setText((position + 1) + "/" + StuFirstNM.length);
txtFstName.setText(rowperson.getDesc());
txtLstName.setText(rowperson.getRating());
//new LoadImage(imgView).execute(rowperson.getUrls());
if (!TextUtils.isEmpty(rowperson.getUrls())) {
// PicassoTrustAll.getInstance(context).load(rowperson.getUrls()).placeholder(context.getResources().getDr`enter code here`awable(R.drawable.ic_launcher)).error(context.getResources().getDrawable(R.drawable.ic_launcher)).into(imgView);
//
byte[] imgbytes = Base64.decode(rowperson.getStrImm(), Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(imgbytes, 0, imgbytes.length);
imgView.setImageBitmap(bitmap);
// PicassoTrustAll.getInstance(context)
// .load(rowperson.getUrls())
// .error(R.mipmap.landinglogo)
// .into(imgView);
Log.w("Testing", "Image Download URL=" + rowperson.getUrls());
} else {
imgView.setBackgroundResource(R.mipmap.landinglogo);
}
((ViewPager) container).addView(itemView);
views.put(position, itemView);
} catch (Exception e)
{
e.printStackTrace();
}
return itemView;
}
public void destroyItem(ViewGroup container, int position, Object object) {
View view = (View) object;
((ViewPager) container).removeView(view);
views.remove(position);
view = null;
}
Ответ 2
Если вы используете Fragments
, вы должны использовать FragmentPagerAdapter
, а не PagerAdapter
. См. Официальную документацию здесь. Вы должны переопределить getItem(int position)
, чтобы вернуть желаемый Fragment
в правильное положение.
Если вы посмотрите на документацию, они показывают класс FragmentPagerAdapter
с именем MyAdapter
. Это выглядит так:
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position);
}
}
Метод getItem(int position)
должен возвращать новый экземпляр конкретного Fragment
. Вы в настоящее время возвращаете null
, что означает, что ничего не будет отображаться. Например, в моем собственном коде я переопределяю getItem()
следующим образом:
@Override
public Fragment getItem(int position)
{
switch (position)
{
case PagerConstants.PAGE_FILTER_RECIPES:
return new FilteredRecipesFragment();
case PagerConstants.PAGE_SELECTED_RECIPES:
return new SelectedRecipesFragment();
case PagerConstants.PAGE_SHOPPING_LIST:
return new ShoppingListFragment();
default: // Make sure that this never happens.
return null;
}
}