3

所以我做了一個Fragment Activity,其中包含ViewPager和TabPageIndicator以從片段滑動到另一個,並且在每個片段中我做了一個包含ViewPager的ListView作爲Header視圖問題是viewPager doesn 「T刷卡就算我確定停用主viewPager swippingListView with Viewpager作爲TabPage裏面的TabPageIndicator

我試着用動作條的標籤同樣的事情,但它沒有工作,要麼

enter image description here

這裏是我的片段活動

public class SampleTabsStyled extends FragmentActivity { 

private static final String[] CONTENT = new String[] { "Recent", "Artists", 
     "Albums", "Songs", "Playlists", "Genres" }; 

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

    FragmentPagerAdapter adapter = new GoogleMusicAdapter(
      getSupportFragmentManager()); 

    final ViewPager pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    pager.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 

      switch (event.getAction()) { 
      case MotionEvent.ACTION_MOVE: 
       pager.requestDisallowInterceptTouchEvent(true); 
       break; 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: 
       pager.requestDisallowInterceptTouchEvent(false); 
       break; 

      } 
      return true; 
     } 

    }); 

    TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator); 
    indicator.setViewPager(pager); 

} 

class GoogleMusicAdapter extends FragmentPagerAdapter { 
    public GoogleMusicAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public ListFragment getItem(int position) { 
     // return TestFragment.newInstance(CONTENT[position % 
     // CONTENT.length]); 
     return new SecondTestFragment(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return CONTENT[position % CONTENT.length].toUpperCase(); 
    } 

    @Override 
    public int getCount() { 
     return CONTENT.length; 
    } 
} 

}

,這裏是我的ListFragment

public class SecondTestFragment extends ListFragment { 

String[] countries = new String[] { "India", "Pakistan", "Sri Lanka", 
     "China", "Bangladesh", "Nepal", "Afghanistan", "North Korea", 
     "South Korea", "Japan" }; 

View mheaderView; 
ViewPager pager; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    /** Creating an array adapter to store the list of countries **/ 

    View parent = inflater.inflate(R.layout.fragment_list, null); 

    // mheaderView = inflater.inflate(R.layout.item_list, null); 
    mheaderView = inflater.inflate(R.layout.featured_pager, null); 
    pager = (ViewPager) mheaderView.findViewById(R.id.featuredPaper); 
    pagerAdapter pa = new pagerAdapter(getActivity()); 
    pager.setAdapter(pa); 
    pager.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      Log.d("Motion Event", event.toString()); 
      return false; 
     } 
    }); 

    CirclePageIndicator indicator = (CirclePageIndicator) mheaderView.findViewById(R.id.featured_indicator); 
    indicator.setViewPager(pager); 




    return parent; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 

    if (mheaderView != null) { 
     this.getListView().addHeaderView(mheaderView); 
     Log.d("pager", "not null"); 
    } else { 
     Log.d("pager", "null"); 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, countries); 
    setListAdapter(adapter); 

    getListView().setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      getListView().getParent().requestDisallowInterceptTouchEvent(true); 
      return false; 
     } 
    }); 

    ((PullToRefreshListView) getListView()).setOnRefreshListener(new OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      // Do work to refresh the list here. 

     } 
    }); 


} 

}

+0

可以請你提供XML佈局,因爲我想也是落實(對不起,我的英語) – Hendy

回答

7

覆蓋canScroll方法在父視圖尋呼機。

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    if(v != this && v instanceof ViewPager) { 
     return true; 
    } 
    return super.canScroll(v, checkV, dx, x, y); 
} 

檢查這個答案

ViewPager inside ViewPager

+1

先生,你是一個搖滾明星 – vezikon

+0

很樂意幫忙! 。 –