从ViewPager返回活动结果

时间:2017-06-29 23:05:04

标签: android android-viewpager adapter startactivityforresult

使用带适配器的ViewPager来显示一些图片(作为图库),当用户点击上面时我需要返回图片的名称

我的问题是我无法从适配器实现onclick,因为我无法将结果返回给调用活动,当我实现viewAdapter.addOnPageChangeListener时,我必须等到页面被更改,所以如果用户点击第一张照片不行 这是我的代码:

for(int i=0;i<images.length;i++)
        imagesArray.add(images[i]);
    MyAdapter myAdapter = new MyAdapter(MyImagePicker.this,imagesArray);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(myAdapter);
    //CircleIndicator indicator = (CircleIndicator) findViewById(R.id.indicator);
    //indicator.setViewPager(mPager);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(mPager, true);

    mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
    {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
Toast.makeText(getApplicationContext()," pos : "+position,Toast.LENGTH_LONG).show();
           // return result //

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}
}




class MyAdapter extends PagerAdapter {

private ArrayList<Integer> images;
private LayoutInflater inflater;
private Context context;

public MyAdapter(Context context, ArrayList<Integer> images) {
    this.context = context;
    this.images=images;
    inflater = LayoutInflater.from(context);
}

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

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

@Override
public Object instantiateItem(ViewGroup view, int position) {
    View myImageLayout = inflater.inflate(R.layout.slider, view, false);
    final ImageView myImage = (ImageView) myImageLayout
            .findViewById(R.id.image);
    myImage.setImageResource(images.get(position));
    myImage.setTag(position+1);
    myImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context," pos : "+view.getTag(),Toast.LENGTH_LONG).show();

        }
    });
    view.addView(myImageLayout, 0);
    return myImageLayout;
}

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



}

3 个答案:

答案 0 :(得分:1)

您可以采取以下几种方法:

1)创建一个回调接口。在您的活动中实现接口(创建一个侦听器)并将其传递到适配器的构造函数中,当用户单击图像时,使用回调将图像名称传递回活动(mlistener.onImageChosen(view.getTag) ())。

public interface ImageChosenListener
{
    void onImageChosen(String image);
}

2)使用适配器播放并在您的活动中安装广播接收器。

答案 1 :(得分:0)

试试这个。

mPager.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch(mPager.getCurrentItem()){
                     case 0:   // its position 0
                           //somthing
                     break;
                     .
                     .
                     .
            }
        });

答案 2 :(得分:0)

谢谢jt-gilkeson, 我认为使用callBack接口是最完美和最简单的解决方案: 这是我的答案:

// Create a callBack interface
public interface CallBack {
void callBack(String pos);
}

// The activity hosting my picture gallery
public class MyImagePicker extends Activity implements CallBack {

private static ViewPager mPager;
private static final Integer[] images= {R.drawable.p1,R.drawable.p2,R.drawable.p3,R.drawable.p4};
private ArrayList<Integer> imagesArray = new ArrayList<Integer>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.galery_image_chooser);
    init();
}

private void init() {
    for(int i=0;i<images.length;i++)
        imagesArray.add(images[i]);
    MyAdapter myAdapter = new MyAdapter(MyImagePicker.this,imagesArray,this);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(myAdapter);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(mPager, true);
}

// Implement the call back function
public void callBack(String pos){
    //return back result
    Intent intent=new Intent();
    intent.putExtra("imgName",pos);
    setResult(2,intent);
    finish();//finishing activity
}
}
相关问题