Android вертикальный адаптер пейджера (добавить другую страницу между адаптером пейджера) - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть требование показа рекламы между страницами вертикального пейджера.Например, новостное приложение, например, inshorts.любой способ сделать это.

данные, используемые для страницы новостей, - это заголовок, содержание и дата, для которых я получаю в jsonarray несколько новостей.Мое требование - добавить другую страницу (рекламную страницу) внутри адаптера пейджера.например: после 5 пролистываний новостей.я должен получить рекламную страницу, которая отличается от страницы новостей

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Сначала вы должны сделать json Array с рекламными данными, включающими

Например: json Array без рекламы

{"s": true, "d": [{"id ":" 203e63d7-3672-4fb7-a899-3ebd281a0e4c "," title ":" Title 1 "," description ":" Description "}, {" id ":" 203e63d7-3672-4fb7-a899-3ebd281a0e4c ","title": "Title 1", "description": "Description"}, {"id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c", "title": "Title 1", "description": "Description"}, {" id ":" 203e63d7-3672-4fb7-a899-3ebd281a0e4c "," title ":" Title 1 "," description ":" Description "}, {" id ":" 203e63d7-3672-4fb7-a899-3ebd281a0e4c "," title ":" Title 1 "," description ":" Description "}]}

теперь создайте пользовательский класс с таким параметром, как title, type, description, advertise_titleand advertise_url

List<CustomObj> list=new ArrayList<>();
for(int i=0;i<jsonArray.size,i++){
int j=i;
j++;
if(j%5==0){
list.add(new CustomObj(jsonArray.get(i).getId(),jsonArray.get(i).getTitle(),jsonArray.get(i).getDescription(),1,"Advertise Title","URL")
}else{
list.add(new CustomObj(jsonArray.get(i).getId(),jsonArray.get(i).getTitle,jsonArray.get(i).getDescription,0,"","")
}

} 

json Массив со списком рекламы

{
  "s": true,
  "d": [
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "Description",
      "advertise_img_url": "https://www.pexels.com/photo/nature-red-love-romantic-67636/a.jpg"
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "Description",
      "advertise_img_url": "https://www.pexels.com/photo/nature-red-love-romantic-67636/a.jpg"
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 1,
      "description": "Description",
      "advertise_title": "Description",
      "advertise_img_url": "https://www.pexels.com/photo/nature-red-love-romantic-67636/a.jpg"
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    },
    {
      "id": "203e63d7-3672-4fb7-a899-3ebd281a0e4c",
      "title": "Title 1",
      "type": 0,
      "description": "Description",
      "advertise_title": "",
      "advertise_img_url": ""
    }
  ]
}

В ViewPagerAdapter,

@Override
public Object instantiateItem(ViewGroup container, int position) {
 View itemView;
 if (mList.get(position).getType() == 0) {
  //for simple item 
  itemView = mLayoutInflater.inflate(R.layout.pager_news, container, false);
  ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
  TextView text = (TextView) itemView.findViewById(R.id.text_id);
  imageView.setImageResource(mResources[position].getUrl());
  text.setText(mResources[position].getTitle());
  container.addView(itemView);
 } else {
  //for adavertise item
  itemView = mLayoutInflater.inflate(R.layout.pager_advertise, container, false);
  ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
  imageView.setImageResource(mResources[position]);
  container.addView(itemView);
 }
 return itemView;
}
0 голосов
/ 20 февраля 2019

Вы можете просто создать два типа фрагмента, один из которых является вашим основным фрагментом, например, фрагмент новостей, а другой будет фрагментом рекламы, который будет отображать рекламу.

И, основываясь на вашей логике, добавьте эти фрагменты в список перед его передачей.к pageradapter, например.

    private ArrayList<Fragment> fragmentList = new ArrayList<>();
    fragmentList.add(NewsFragment.newInstance());
    fragmentList.add(NewsFragment.newInstance());
    fragmentList.add(NewsFragment.newInstance());
    fragmentList.add(NewsFragment.newInstance());
    fragmentList.add(NewsFragment.newInstance());
    fragmentList.add(AdFragment.newInstance());

    NewsPagerAdapter newsPagerdapter = new NewsPagerAdapter(getSupportFragmentManager(), fragmentList);
    viewPager.setAdapter(newsPagerdapter);

И ваш адаптер будет выглядеть так -

public class NewsPagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<Fragment> fragmentList = new ArrayList<>();


public NewsPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmentList) {
    super(fm);
    this.fragmentList=fragmentList;

}


@Override
public Fragment getItem(int position) {
    return fragmentList.get(position);
}

@Override
public int getCount() {
    return fragmentList.size();
}
}
...