通过ViewPager图像Android循环



我正在开发一个Android应用程序,我使用ViewPager显示REST API的一些图像。这些API具有JSON格式的大量图像。我只想向ViewPager显示前8或10张图像。但是我没有得到正确循环图像的正确方法。这是我的查看Pager的代码。

private static ViewPager viewPager;
private static int currentPage = 0;
private List<NewsModel> imageList=new ArrayList<>( );
private ViewPagerAdapter adapter;
private NewsController mController;
private Timer swipeTimer;
private Handler handler;
private Runnable Update;

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.option_main_fragment, container, false);
    viewPager = view.findViewById(R.id.pager);
    adapter=new ViewPagerAdapter( this.getActivity(),imageList );
    CircleIndicator indicator = (CircleIndicator) view.findViewById(R.id.indicator);
    viewPager.setAdapter(adapter);
    indicator.setViewPager(viewPager);
    adapter.registerDataSetObserver(indicator.getDataSetObserver());
    mController = new NewsController(this);
    mController.startFetching();
    return view;
}
   @Override
public void onResume() {
    // Auto start of viewpager
    handler = new Handler();
    Update= new Runnable() {
        public void run() {
            if (currentPage == imageList.size()) {
                currentPage = 0;
            }
            viewPager.setCurrentItem(currentPage++, true);
            System.out.println(viewPager.getCurrentItem());
        }
    };
    swipeTimer = new Timer();
    swipeTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            handler.post(Update);
        }
    },2000,5000);
    super.onResume();
}
@Override
public void onPause() {
    swipeTimer.cancel();
    super.onPause();
}

编辑的代码这是获取JSON DATA

的代码
public class NewsController {
private static final String TAG = NewsController.class.getSimpleName();
private UserCallbackListener mListener;
private NewsRestApiManager mApiManager;
private AppImage appImages;
Realm news_realm;
ArrayList<String> title_list = new ArrayList<>();
GlobalClass globalClass = new GlobalClass();
public NewsController(UserCallbackListener listener) {
    mListener = listener;
    mApiManager = new NewsRestApiManager();
}

public void startFetching(){
    news_realm = Realm.getDefaultInstance();
   mApiManager.getNewsApi().getNews(new Callback<String>() {
        @Override
        public void success(String s, Response response) {
            Log.d(TAG, "JSON :: " + s);
            try {
                JSONArray array = new JSONArray(s);
                for(int i = 0; i < array.length(); i++) {
                    JSONObject jsonObject = array.getJSONObject(i);
                    NewsModel news = new NewsModel();
                    news.setTitle( jsonObject.optString( "title") );
                    news.setBody( jsonObject.optString( "body" ) );
                    news.setUpdatedAt( jsonObject.getString( "updated_at" ) );
                    ArrayList<AppImage> list = new ArrayList();
                    JSONArray imageArray =jsonObject.getJSONArray("appImages");
                    if (imageArray.length() > 1) {
                        for(int j=0; j<imageArray.length();j++){
                            appImages  = new AppImage();
                            try {
                                appImages.setSrc( new JSONArray( s ).getJSONObject( i ).getJSONArray( "appImages" ).getJSONObject( j ).optString( "src" ) );
                            }catch (JSONException e){
                                e.printStackTrace();
                            }
                            list.add(appImages);
                        }
                    }
                    news.setAppImages( list );
                    TeaserImageSmall coverImage=new TeaserImageSmall();
                    try {
                        coverImage.setSrc( jsonObject.getJSONObject("teaserImageSmall").optString("src"));
                        news.setTeaserImageSmall(coverImage);
                    } catch (JSONException e) {
                        Log.d(TAG, "News image could not be loaded for: " + news.getTitle());
                    }
                    mListener.onFetchProgressNews(news);

                }
            } catch (JSONException e) {
                mListener.onFetchFailed();
            }
            mListener.onFetchComplete();
        }
        @Override
        public void failure(RetrofitError error) {
            Log.d(TAG, "Error :: " + error.getMessage());
            mListener.onFetchComplete();
        }
    });
}
public interface UserCallbackListener{
    void onFetchProgressNews(NewsModel news);
    void onFetchComplete();
    void onFetchFailed();
}

}

适配器类

public class ViewPagerAdapter extends PagerAdapter{
private List<NewsModel> imageList;
private LayoutInflater layoutInflater;
private Context context;
public ViewPagerAdapter(Context context, List<NewsModel> imageList) {
    this.context = context;
    this.imageList=imageList;
}
@Override
public int getCount() {
    return imageList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
    return view==object;
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
    layoutInflater=(LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
    View itemView = layoutInflater.inflate(R.layout.sliding_img_layout, view, false);
    final NewsModel imageFromNews=imageList.get( position );
    ImageView myImage = itemView.findViewById(R.id.sliding_image);
    Picasso.with(itemView.getContext()).load(imageFromNews.getTeaserImageSmall().getSrc()).into( myImage );
    view.addView(itemView, 0);
    myImage.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i=new Intent(context,DetailNews.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("src",imageFromNews.getTeaserImageSmall().getSrc());
            i.putExtra("title",imageFromNews.getTitle());
            i.putExtra("body",imageFromNews.getBody());
            context.startActivity(i);
        }
    } );
    return itemView;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

}

我想您可以更改

的代码
ArrayList<AppImage> list = new ArrayList();
JSONArray imageArray =jsonObject.getJSONArray("appImages");
if (imageArray.length() > 1) {
    for(int j=0; j<imageArray.length() && j < 8;j++) { // Added condition j < 8
        appImages  = new AppImage();
        try {
            appImages.setSrc( new JSONArray( s ).getJSONObject( i ).getJSONArray( "appImages" ).getJSONObject( j ).optString( "src" ) );
        }catch (JSONException e){
            e.printStackTrace();
        }
        list.add(appImages);
    }
}
news.setAppImages( list );

还有其他方法可以做到这一点您可以修复ViewPager项目Count

@Override
public int getCount() {
    return imageList.size() <= 8? imageList.size():8;
}

最新更新