2013-06-13 8 views
6

いくつかの画像とリストビューを持つビューページをいくつかのデータで表示するアクティビティをプログラムしようとしていますが、私の問題はリストビューの最後の部分だけをスクロールできることです私はリストビューとviewpagerをスクロール可能にしたかった画面はので、私はここに私のXMLファイルViewPagerをlistViewにヘッダとして追加する

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<com.devsmart.android.ui.HorizontalListView 
    android:id="@+id/sectionsList" 
    android:layout_width="wrap_content" 
    android:layout_height="25dp" 
    android:background="@drawable/menu_bg" /> 

<include layout="@layout/main_screen_components" /> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

だと私は私のクラスでこれを書く。..ヘッダとしてそれを置くことについて考え

@Override 
    protected void onPostExecute(List<News> result) { 
     Utils.pagerNews(result); 
     Utils.listNews(result); 

     ImagePagerAdapter pAdapter = new ImagePagerAdapter(
       appManager.getPagerNews()); 
     pager.setAdapter(pAdapter); 

     View headerView = getLayoutInflater().inflate(R.layout.main_screen_components , null , false); 

     NewsListAdapter adapter = new NewsListAdapter(getBaseContext(), 
       appManager.getListNews()); 
     listView.addHeaderView(headerView); 
     listView.setAdapter(adapter); 
     progress.dismiss(); 
    } 

私はこのコードを実行すると、重複したページャーを提供します。データと空のリストビューのヘッダーとして固定されています。ポケットベルにアダプターを設定しようとすると、 .. 何か案が ?このような

答えて

20

だけ設定viewPagerのonTouchListener、:

viewPager.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    PointF downP = new PointF(); 
    PointF curP = new PointF(); 
    int act = event.getAction(); 
    if(act == MotionEvent.ACTION_DOWN || act == MotionEvent.ACTION_MOVE || act == MotionEvent.ACTION_UP){ 
     ((ViewGroup) v).requestDisallowInterceptTouchEvent(true); 
     if (downP.x == curP.x && downP.y == curP.y) { 
     return false; 
     } 
    } 
    return false; 
    } 
+0

あなたは私の一日保存しました!これは魅力のように機能します。 – Antonio

+0

あなたも私の日を救った!これは素晴らしいです〜 – daimajia

+0

@eric私はこの機能を理解する問題に直面しています。この関数は、アクションが少なくてもfalseを返します。そして、dowpとcurPはちょうど初期化されていますが、dowpとcurPのx、yが0で常に等しいことを意味する値の変化はありません。 –

0

は、カスタムviewpagerクラスの下に使用します。

public class CustomViewPager extends ViewPager { 
boolean xScored = false, yScored = false; 

public CustomViewPager(Context context) { 
    super(context); 
} 

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

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    mGestureDetector.onTouchEvent(ev); 
    if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { 
     xScored = false; 
     yScored = false; 
     requestDisallowInterceptTouchEvent(false); 
    } 
    return super.onTouchEvent(ev); 
} 

GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() { 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     if (!yScored && Math.abs(distanceX) > Math.abs(distanceY)) { 
      xScored = true; 
      yScored = false; 
     } 
     if (xScored) { 
      requestDisallowInterceptTouchEvent(true); 
     } else if (!xScored && Math.abs(distanceY) > Math.abs(distanceX)) { 
      xScored = false; 
      yScored = true; 
      requestDisallowInterceptTouchEvent(false); 
     } 
     return true; 
    } 

}; 
GestureDetector mGestureDetector = new GestureDetector(getContext(), mOnGestureListener); 
} 
関連する問題