Android 循环浏览ViewPager图像
我正在开发一个android应用程序,其中我使用viewpager显示RESTAPI中的一些图像。这些Api有许多json格式的图像。我只想在viewpager中显示前8或10个图像。但是我没有找到正确的方法来循环浏览图像。这是我的查看寻呼机代码Android 循环浏览ViewPager图像,android,for-loop,android-viewpager,Android,For Loop,Android Viewpager,我正在开发一个android应用程序,其中我使用viewpager显示RESTAPI中的一些图像。这些Api有许多json格式的图像。我只想在viewpager中显示前8或10个图像。但是我没有找到正确的方法来循环浏览图像。这是我的查看寻呼机代码 private static ViewPager viewPager; private static int currentPage = 0; private List<NewsModel> imageList=new ArrayList&
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();
}
private static ViewPager ViewPager;
私有静态int currentPage=0;
私有列表imageList=newarraylist();
专用ViewPagerAdapter适配器;
专用新闻控制器;
私人定时器;
私人经办人;
私有可运行更新;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.option\u main\u片段,容器,假);
viewPager=view.findViewById(R.id.pager);
适配器=新的ViewPagerAdapter(this.getActivity(),imageList);
CircleIndicator indicator=(CircleIndicator)view.findViewById(R.id.indicator);
viewPager.setAdapter(适配器);
指示器。设置viewPager(viewPager);
registerDataSetObserver(indicator.getDataSetObserver());
mController=新的新闻控制器(此);
mController.startFetching();
返回视图;
}
@凌驾
恢复时公开作废(){
//自动启动viewpager
handler=新的handler();
Update=newrunnable(){
公开募捐{
如果(currentPage==imageList.size()){
currentPage=0;
}
setCurrentItem(currentPage++,true);
System.out.println(viewPager.getCurrentItem());
}
};
swipeTimer=新计时器();
swipeTimer.schedule(新TimerTask(){
@凌驾
公开募捐{
处理人.职位(更新);
}
},2000,5000);
super.onResume();
}
@凌驾
公共无效暂停(){
swipitemer.cancel();
super.onPause();
}
编辑的代码这是获取json数据的代码
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();
}
公共类新闻控制器{
私有静态最终字符串标记=newcontroller.class.getSimpleName();
私有用户callbacklistener mListener;
私有新闻商店管理器;
私有AppImage AppImage;
领域新闻领域;
ArrayList title_list=新建ArrayList();
GlobalClass GlobalClass=新的GlobalClass();
公共新闻控制器(UserCallbackListener侦听器){
mListener=监听器;
mApiManager=新的NewsRestApiManager();
}
公开作废开始蚀刻(){
news_realm=realm.getDefaultInstance();
mApiManager.getNewsApi().getNews(新回调函数(){
@凌驾
public void成功(字符串s,响应){
Log.d(标记“JSON::”+s);
试一试{
JSONArray数组=新的JSONArray;
对于(int i=0;i1){
对于(int j=0;j我想您可以如下更改代码
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 );
ArrayList list=new ArrayList();
JSONArray imageArray=jsonObject.getJSONArray(“appImages”);
if(imageArray.length()>1){
对于(int j=0;j当你运行你的应用程序时会发生什么?这与你想要的有什么不同?它在整个图像数据中循环。但我只想要前8张图像请显示获取图像数据的代码。然后在imageList
@Kunu中只添加8到10张图像。你能解释一下我该如何做吗?我不想循环浏览co控件类。因为我需要这些图像用于其他目的。我只想在viewpager中创建一个循环。
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 );
@Override
public int getCount() {
return imageList.size() <= 8? imageList.size():8;
}