1. 程式人生 > >listview中巢狀viewpager的實現總結

listview中巢狀viewpager的實現總結

最近在做一個專案需要在listView中巢狀viewPager作為第一項,效果如下:


上面的佈局就是一個listView,在實現過程中遇到了以下問題:

1.listView中第一項為viewPager,其他項為單獨包含兩種資料型別,導致listView佈局混亂。

2.viewPager與listView的滑動衝突

3.viewPager的監聽器在viewPager切換的時候,進入了onPageChang方法但介面上沒有顯示相應的頁碼重新整理。

針對問題1,查資料後發現當listView中的item型別超過一項時,需要過載方法

    @Override
    public int getViewTypeCount() {
		return 2;
	}
	
    @Override
    public int getItemViewType(int position) { 
		return position > 0 ? 0 : 1;
	}

針對問題2,上網搜尋後發現了兩種解決辦法:

(1)重寫listView

public class MyListView extends ListView {
	private GestureDetector mGestureDetector;
	    View.OnTouchListener mGestureListener;
	public MyListView(Context context) {
	  super(context);
	}
	public MyListView(Context context, AttributeSet attrs) {
	  super(context, attrs);
	  mGestureDetector = new GestureDetector(new YScrollDetector());
	  setFadingEdgeLength(0);
	}
	public MyListView(Context context, AttributeSet attrs, int defStyle) {
	  super(context, attrs, defStyle);
	}
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
	  return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
	}
	class YScrollDetector extends SimpleOnGestureListener {
	        @Override
	        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
	   if(distanceY!=0&&distanceX!=0){
	           
	   }
	            if(Math.abs(distanceY) >= Math.abs(distanceX)) {
	                return true;
	            }
	            return false;
	        }
	}
	}

(2)重寫ViewPager
public class MyViewPager extends ViewPager {

	public MyViewPager(Context context) {
		super(context);
	}
	
	public MyViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		getParent().requestDisallowInterceptTouchEvent(true);//這句話的作用 告訴父view,我的單擊事件我自行處理,不要阻礙我。  
        return super.dispatchTouchEvent(ev);
	}
}
上面兩種方法可以解決listView和ViewPager的滑動問題,注意需要固定ViewPager的高度,才能在listView中完整的顯示出來。

針對問題3

發現我把viewPager的監聽器寫在了listView的getView中,導致多次載入監聽器,出現監聽器不管用的問題。把OnPageChangeListener監聽器放在初始化的時候就可以正常重新整理了。

 有不清楚的可以留言。

相關推薦

listviewviewpager實現總結

最近在做一個專案需要在listView中巢狀viewPager作為第一項,效果如下: 上面的佈局就是一個listView,在實現過程中遇到了以下問題: 1.listView中第一項為viewPager,其他項為單獨包含兩種資料型別,導致listView佈局混亂。 2.v

Android:ScrollViewViewPagerListView示例

引言: 我們在實際開發一個款Android App時,經常會遇到Scrollview和ViewPager和ListView同時使用的場景,如下圖所示的需求: 下面我們通過程式碼來模擬一下這種場景: 佈局檔案: <?xml version="

webviewhtml實現精準定位(百度地圖、高德地圖、騰訊地圖、H5原生定位)js對比

最近在實現一個功能,就是在安卓手機和蘋果手機嵌入html程式碼,實現精準定位,我為此對比幾種定位的方法。我要的是精準定位,就是誤差在100米左右的功能,類似與外賣app那種定位精確度 1. 首先是原生h5定位 if(browser.versions.an

ListViewViewFlow,ViewFlow滑動有些卡頓的問題~

最近做類似於網易新聞頭條那種圖片Banner,實現方法是:在ListView中巢狀ViewFlow,但是ViewFlow的滑動總是不是那麼順暢,覺得應該是觸屏事件攔截衝突的問題吧,在網上查閱了一下我的解決方法如下: 在ViewFlow中宣告mListView,然後將父ListView傳入到ViewFlow,

scrollviewviewpager不顯示

activityScdetailsBottomVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {              @Override            publicvoid onPageS

RecyclerViewViewPager實現淘寶搜狐主頁廣告輪播圖

RecyclerView巢狀ViewPager實現原理: RecyclerView巢狀ViewPager實際上就是RecyclerView複雜佈局的實現,給其中一個item設定為ViewPager來實現廣告輪播圖。既然知道原理 那麼

fragmentviewpager,vierpager有多個fragment,不顯示 ...

現在好多應用流行一種佈局。底部幾個工具欄選項,上面也有類似tab的選項。 底部用RadioGroup控制fragment的切換。以上有五個fragment。 第一個fragment,代表著首頁。首頁又是一個類似tab的fragment,使用viewpager切換著兩

fragmentviewpagerviewpager有多個fragment,裡面fragment沒有顯示

fragment巢狀fragment導致裡面fragment介面沒有顯示,例子如下: private void InitViewPager(View parentView) { mPag

關於ListViewEditText,焦點及其他點選問題

之前專案做過這個類似的UI,處理起來也很麻煩,要求的效果是 1.EditText點擊出現輸入法,遊標顯示在最後,效果如圖 2.編輯完內容後,收起鍵盤儲存修改內容。 這裡會用到幾個類 1.自定義Adapter(主要的處理也是在這裡) 2.自定義的EditText(

安卓在ScrollViewViewPager時,設定ViewPager的單個頁面高度隨內容變化

在開發過程中,有時候頁面佈局比較複雜,會使用到ScrollView和ViewPager,如果不進行處理,會出現不顯示ViewPager的子頁面,或者子頁面高度一樣,內容顯示不全,或者是留白太多。我的需求是需要在頁面下面加一個可以左右滑動的分欄,而且兩個分類的頁面高度不一致且不

fragmentviewpager,vierpager有多個fragment,不顯示而且滑動卡頓

現在好多應用流行一種佈局。底部幾個工具欄選項,上面也有類似tab的選項。 底部用RadioGroup控制fragment的切換。以上有五個fragment。 第一個fragment,代表著首頁。首頁又是一個類似tab的fragment,使用viewpager切換著兩個fragment。  priv

Android ViewPager實現連貫雙滑動

ViewPager巢狀ViewPager後,滑動事件沒法在子ViewPager裡面響應。 解決辦法是自定義子ViewPager。 通知他的父ViewPager現在進行的是本控制元件的操作,不要對我的操作進行干擾 getParent().requestDisallow

androidListViewGridView並且把GridView當中的內容全部顯示出來的方法

程式碼如下所示: public class MyGridView extends GridView { public MyGridView(android.content.Context context, android.u

HorizontalScrollView viewpager滑動衝突的解決

在 HorizontalScrollView 中巢狀 viewpager,viewpager不會隨手勢滑動,所以要複寫viewpager public class MyViewpager extends ViewPager { MyViewpager viewpage

Android-ListView(ListView)控制元件時item的點選事件不起作用的問題

解決:1、在主listview佈局檔案中的listview中新增屬性 android:focusable="false"              2、在子listview中最頂上的佈局檔案新增屬性

ListviewCheckbox的簡單解決辦法

最近專案中做了一個關於批量刪除的這樣一個操作,以前是會做的,誰知道記性不好忘光了,經過一番折騰還是完美的實現了,相信後面還有無數個和我一樣的渣渣會遇到這個問題,那麼就讓我來分享一下咯。 當然這個checkbox控制元件是寫在item佈局中的。我這邊的需求是點選編輯按鈕才會顯

ListViewGridView時GridView的資料無法完全顯示,只顯示一行

這種情況下需要自定義一個GridView,然後重寫GridView的onMeasure(int widthMeasureSpec, int heightMeasureSpec)的方法,將GridView重新測量,並且指定GridView的新的高度 package com.y

ListViewGridView點選事件

做一個專案時,需要在ListView中巢狀GridView,因為ListView的每個條目中不一定出現GridView,那麼問題來了,新增GridView的Item的點選事件後,有GridView出現的條目中,ListView的Item點選事件無法觸發,這時我們就需要設定L

解決SwipeRefreshLayout和ScrollViewViewPager卡頓問題

autoCycleViewPager.setOnTouchListener(this); int downX; int downY; int dragthreshold = 30; @Overrid

AndroidScrollViewViewPager導致ViewPager不顯示的問題

需要ScrollView中加入fillViewport屬性,同時ViewPager設定為固定高度,否則會出現,ViewPager充滿螢幕的情況  <ScrollView         android:layout_width="match_parent"