已经使用ViewPager实现了滑动的效果,但是发现子页原本的事件监听都失效了 需要移到ViewPager页的instantiateItem方法中,但是这样的8 9个页面的方法都在一起很乱。请问如何在使用ViewPager整合后使子页原本的事件监听都还能用。viewpager事件监听失效

解决方案 »

  1.   

    myViewPager.setOnPageChangeListener
    里面有
    public void onPageSelected(final int arg0)
    在这里定义对应的事件试试
    给你举个小例子吧,你参考一下:
    我的layout1里有imageView1 layout2里有imageView2...
    我要给他们绑定点击事件,绑在外面,切换就清失了,因为view改变了myViewPager.setOnPageChangeListener(new OnPageChangeListener() {
             @Override
    public void onPageSelected(final int arg0) {
    View v = mListViews.get(arg0);
    final ImageView iv = (ImageView) findViewById(getResources().getIdentifier("imageView"+(arg0+1), "id", "com.android.testPackage"));
    iv.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
    ......//so on
      

  2.   

    谢谢你的回答,这样不是还是全在viewpage后台吗?
      

  3.   

    有几种方法啊
    1.使用onPageSelected监听
    2.把事件先添加好,在instantiateItem里面只获取List<View>的引用,不改变它的事件
      

  4.   


    您的第2种能给个简单的demo吗?麻烦了...
      

  5.   


    您的第2种能给个简单的demo吗?麻烦了...package com.example.androidtest;import java.util.ArrayList;
    import java.util.List;import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.database.DataSetObserver;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.PageTransformer;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.animation.AnimationUtils;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.TextView;@SuppressLint("NewApi")
    public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
    private List<List<String>> listStations=new ArrayList<List<String>>();
    ViewPager viewPager; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
    viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    initData();
    }
    });
    } @SuppressLint("NewApi")
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer {     
    private static final float MIN_SCALE = 0.85f;     
    private static final float MIN_ALPHA = 0.5f;     
    @SuppressLint("NewApi")
    public void transformPage(View view, float position) 
    {        
    int pageWidth = view.getWidth();        
    int pageHeight = view.getHeight();   
    Log.d("dd",view.getTag()+"  pageWidth:"+pageWidth+"  pageHeight:"+pageHeight+" position:"+position);
    if (position < -1) { // [-Infinity,-1)             // This page is way off-screen to the left.             
    view.setAlpha(0);         
    } else if (position <= 1) { // [-1,1]             // Modify the default slide transition to shrink the page as well             
    float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            
    float vertMargin = pageHeight * (1 - scaleFactor) / 2;             
    float horzMargin = pageWidth * (1 - scaleFactor) / 2;            
    if (position < 0) {                
    view.setTranslationX(horzMargin - vertMargin / 2);           

    else {                
    view.setTranslationX(-horzMargin + vertMargin / 2);            
    }              // Scale the page down (between MIN_SCALE and 1)             
    view.setScaleX(scaleFactor);            
    view.setScaleY(scaleFactor);              // Fade the page relative to its size.             
    view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));       
    } else { // (1,+Infinity]             // This page is way off-screen to the right.            
    view.setAlpha(0);        

    }
    } private void initData(){
    for(int i=0;i<5;i++){
    View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
    view.setTag("索引:"+i);
    listView.add(view); List<String> listStation=new ArrayList<String>();
    for(int j=0;j<50;j++){
    listStation.add("站点:"+j);
    }
    listStations.add(listStation);
    } viewPager.setAdapter(new PagerAdapter() { @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0==arg1;
    } @Override
    public int getCount() {
    return listView.size();
    } @Override
    public Object instantiateItem(ViewGroup container, final int position) {
    View view=listView.get(position);
    ListView lv= (ListView) view.findViewById(R.id.listView1);
    lv.setAdapter(new BaseAdapter() { @Override
    public View getView(int p, View convertView, ViewGroup parent) {
    if(convertView==null){
    convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
    } ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
    return convertView;
    } @Override
    public long getItemId(int p) {
    return p;
    } @Override
    public Object getItem(int p) {
    // TODO Auto-generated method stub
    return listStations.get(position).get(p);
    } @Override
    public int getCount() {
    return listStations.get(position).size();
    }
    });
    container.addView(listView.get(position)); return listView.get(position);
    } @Override
    public void destroyItem(ViewGroup container, int position,
    Object object) {
    container.removeView(listView.get(position));
    }
    });
    viewPager.setCurrentItem(0);
    }}
      

  6.   


    您的第2种能给个简单的demo吗?麻烦了...
    package com.example.androidtest;import java.util.ArrayList;
    import java.util.List;import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.database.DataSetObserver;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.PageTransformer;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.animation.AnimationUtils;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.TextView;@SuppressLint("NewApi")
    public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
    private List<List<String>> listStations=new ArrayList<List<String>>();
    ViewPager viewPager; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
    viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    initData();
    }
    });
    } @SuppressLint("NewApi")
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer {     
    private static final float MIN_SCALE = 0.85f;     
    private static final float MIN_ALPHA = 0.5f;     
    @SuppressLint("NewApi")
    public void transformPage(View view, float position) 
    {        
    int pageWidth = view.getWidth();        
    int pageHeight = view.getHeight();   
    Log.d("dd",view.getTag()+"  pageWidth:"+pageWidth+"  pageHeight:"+pageHeight+" position:"+position);
    if (position < -1) { // [-Infinity,-1)             // This page is way off-screen to the left.             
    view.setAlpha(0);         
    } else if (position <= 1) { // [-1,1]             // Modify the default slide transition to shrink the page as well             
    float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            
    float vertMargin = pageHeight * (1 - scaleFactor) / 2;             
    float horzMargin = pageWidth * (1 - scaleFactor) / 2;            
    if (position < 0) {                
    view.setTranslationX(horzMargin - vertMargin / 2);           

    else {                
    view.setTranslationX(-horzMargin + vertMargin / 2);            
    }              // Scale the page down (between MIN_SCALE and 1)             
    view.setScaleX(scaleFactor);            
    view.setScaleY(scaleFactor);              // Fade the page relative to its size.             
    view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));       
    } else { // (1,+Infinity]             // This page is way off-screen to the right.            
    view.setAlpha(0);        

    }
    } private void initData(){
    for(int i=0;i<5;i++){
    View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
    view.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    // 在这里添加点击事件

    }
    });
    view.setTag("索引:"+i);
    listView.add(view); List<String> listStation=new ArrayList<String>();
    for(int j=0;j<50;j++){
    listStation.add("站点:"+j);
    }
    listStations.add(listStation);
    } viewPager.setAdapter(new PagerAdapter() { @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0==arg1;
    } @Override
    public int getCount() {
    return listView.size();
    } @Override
    public Object instantiateItem(ViewGroup container, final int position) {
    View view=listView.get(position);
    ListView lv= (ListView) view.findViewById(R.id.listView1);
    lv.setAdapter(new BaseAdapter() { @Override
    public View getView(int p, View convertView, ViewGroup parent) {
    if(convertView==null){
    convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
    } ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
    return convertView;
    } @Override
    public long getItemId(int p) {
    return p;
    } @Override
    public Object getItem(int p) {
    // TODO Auto-generated method stub
    return listStations.get(position).get(p);
    } @Override
    public int getCount() {
    return listStations.get(position).size();
    }
    });
    container.addView(listView.get(position)); return listView.get(position);
    } @Override
    public void destroyItem(ViewGroup container, int position,
    Object object) {
    container.removeView(listView.get(position));
    }
    });
    viewPager.setCurrentItem(0);
    }}
      

  7.   


    您的第2种能给个简单的demo吗?麻烦了...
    package com.example.androidtest;import java.util.ArrayList;
    import java.util.List;import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.database.DataSetObserver;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.PageTransformer;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.animation.AnimationUtils;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.TextView;@SuppressLint("NewApi")
    public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
    private List<List<String>> listStations=new ArrayList<List<String>>();
    ViewPager viewPager; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
    viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    initData();
    }
    });
    } @SuppressLint("NewApi")
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer {     
    private static final float MIN_SCALE = 0.85f;     
    private static final float MIN_ALPHA = 0.5f;     
    @SuppressLint("NewApi")
    public void transformPage(View view, float position) 
    {        
    int pageWidth = view.getWidth();        
    int pageHeight = view.getHeight();   
    Log.d("dd",view.getTag()+"  pageWidth:"+pageWidth+"  pageHeight:"+pageHeight+" position:"+position);
    if (position < -1) { // [-Infinity,-1)             // This page is way off-screen to the left.             
    view.setAlpha(0);         
    } else if (position <= 1) { // [-1,1]             // Modify the default slide transition to shrink the page as well             
    float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            
    float vertMargin = pageHeight * (1 - scaleFactor) / 2;             
    float horzMargin = pageWidth * (1 - scaleFactor) / 2;            
    if (position < 0) {                
    view.setTranslationX(horzMargin - vertMargin / 2);           

    else {                
    view.setTranslationX(-horzMargin + vertMargin / 2);            
    }              // Scale the page down (between MIN_SCALE and 1)             
    view.setScaleX(scaleFactor);            
    view.setScaleY(scaleFactor);              // Fade the page relative to its size.             
    view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));       
    } else { // (1,+Infinity]             // This page is way off-screen to the right.            
    view.setAlpha(0);        

    }
    } private void initData(){
    for(int i=0;i<5;i++){
    View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
    view.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    // 在这里添加点击事件

    }
    });
    view.setTag("索引:"+i);
    listView.add(view); List<String> listStation=new ArrayList<String>();
    for(int j=0;j<50;j++){
    listStation.add("站点:"+j);
    }
    listStations.add(listStation);
    } viewPager.setAdapter(new PagerAdapter() { @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0==arg1;
    } @Override
    public int getCount() {
    return listView.size();
    } @Override
    public Object instantiateItem(ViewGroup container, final int position) {
    View view=listView.get(position);
    ListView lv= (ListView) view.findViewById(R.id.listView1);
    lv.setAdapter(new BaseAdapter() { @Override
    public View getView(int p, View convertView, ViewGroup parent) {
    if(convertView==null){
    convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
    } ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
    return convertView;
    } @Override
    public long getItemId(int p) {
    return p;
    } @Override
    public Object getItem(int p) {
    // TODO Auto-generated method stub
    return listStations.get(position).get(p);
    } @Override
    public int getCount() {
    return listStations.get(position).size();
    }
    });
    container.addView(listView.get(position)); return listView.get(position);
    } @Override
    public void destroyItem(ViewGroup container, int position,
    Object object) {
    container.removeView(listView.get(position));
    }
    });
    viewPager.setCurrentItem(0);
    }}

    很感谢你的demo 这样依旧需要把所有分页的后台写在ViewPager中,看来好像没什么好办法了。
      

  8.   

    找到解决方案了,不能说是完美的办法,但是也算曲线救国,
    在viewpager中对事件进行监听,具体实现到别去,这样代码结构会清晰很多
    例子
    viewpager 中
    gobButton.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    // TODO Auto-generated method stub
    //viewPager.setCurrentItem(1);
    viewPager.setCurrentItem(2);
    Third third=new Third();
    third.aa(TestViewPager.this);
    }
    });
    在其他类或Third activity后台:
    public void aa(Activity sa)
    {
    String a="";
    tv=(TextView)sa.findViewById(R.id.tvtt);
    tv.setText("哈哈搞定");
    Toast.makeText(sa, "OK", Toast.LENGTH_SHORT).show();
    }