首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ViewPager和Toast

ViewPager和Toast
EN

Stack Overflow用户
提问于 2012-10-12 17:43:52
回答 2查看 2.3K关注 0票数 0

我有一个从远程服务器加载图像的ViewPager。我的问题是,一旦选择了一个特定的位置(而不是点击),我不知道如何给它一个函数。比方说,我滑动视图页面,直到它到达特定的图像,比如图像5,我想显示一些Toast,上面写着“图像5”。

代码语言:javascript
复制
pager.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id) {  





 public class ImagePagerActivity extends BaseActivity {

    private ViewPager pager;

    private DisplayImageOptions options;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.ac_image_pager);
    Bundle bundle = getIntent().getExtras();
    String[] imageUrls = bundle.getStringArray(Extra.IMAGES);
    int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0);

    options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.image_for_empty_url)
                .cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build();

    pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(new ImagePagerAdapter(imageUrls));
    pager.setCurrentItem(pagerPosition);

    }

    protected void onStop() {
    imageLoader.stop();
    super.onStop();
    }

    private class ImagePagerAdapter extends PagerAdapter {

    private String[] images;
    private LayoutInflater inflater;

    ImagePagerAdapter(String[] images) {
    this.images = images;
    inflater = getLayoutInflater();
    }

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

    public void finishUpdate(View container) {
    }

    public int getCount() {
    return images.length;
    }

    public Object instantiateItem(View view, int position) {
                final View imageLayout = inflater.inflate(R.layout.item_pager_image, null);
                final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
                final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);

    imageLoader.displayImage(images[position], imageView, options, new ImageLoadingListener() {

    public void onLoadingStarted() {
    spinner.setVisibility(View.VISIBLE);
    }


    public void onLoadingFailed(FailReason failReason) {
    String message = null;
    switch (failReason) {
    case IO_ERROR:
    message = "Input/Output error";
    break;
    case OUT_OF_MEMORY:
    message = "Out Of Memory error";
    break;
    case UNKNOWN:
    message = "Unknown error";
    break;
    }
    Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();

    spinner.setVisibility(View.GONE);
                              imageView.setImageResource(android.R.drawable.ic_delete);
                    }


    public void onLoadingComplete(Bitmap loadedImage) {
    spinner.setVisibility(View.GONE);
    Animation anim = AnimationUtils.loadAnimation(ImagePagerActivity.this, R.anim.fade_in);
    imageView.setAnimation(anim);
    anim.start();
    }

    public void onLoadingCancelled() {
    // Do nothing
    }
    });

    ((ViewPager) view).addView(imageLayout, 0);
    return imageLayout;
    }

    public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
    }

    public void restoreState(Parcelable state, ClassLoader loader) {
    }
    public Parcelable saveState() {
    return null;
    }

    public void startUpdate(View container) {
    }
    }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 17:50:23

您可以实现onPageChangeListener,然后可以使用(setOnPageChangeListener()) ...将此pageChageListener设置为您的ViewPager。

代码语言:javascript
复制
public class ImagePagerActivity extends BaseActivity implements onPageChangeListener {
    private ViewPager pager;
    // other variables here

    public void onCreate(Bundle savedInstanceState) {
        // create view Pager 
        // other variables 
        pager.setOnPageChangeListener(this);
    }

    // methods for Page Change Listener
    @Override
    public void onPageSelected(int pos) {
        if (pos==5) {
          //show Toast here 
        }
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // do Nothing
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // do Noting
    }

}// class def ends here

编辑..

使用此速记版本

代码语言:javascript
复制
Pager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int arg0) {
        if (pos==5) {
            //show Toast here 
        }
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
    }

    @Overridee3public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub
    }
});
票数 1
EN

Stack Overflow用户

发布于 2012-10-12 17:49:28

您应该使用OnPageChangeListener

您可以使用as onPageSelected(int position)方法来获取当前位置。

就像这样

代码语言:javascript
复制
pager.setOnPageChangeListener(this);

然后让您的ImagePagerActivity实现OnPageChangeListener接口:

代码语言:javascript
复制
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}

public void onPageSelected(int position) {
    Toast.makeText(getApplicationContext(), "image " + position, Toast.LENGTH_SHORT).show();
}

public void onPageScrollStateChanged(int state) {
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12856341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档