6

ビューページャーにいくつかの画像といくつかのデータを含むリストビューを表示するアクティビティをプログラムしようとしています..しかし、私の問題は、ビューページャーをスクロール可能にしたかった画面の最後の部分でリストビューのみをスクロールできることですリストビューなので、ヘッダーとして配置することを考えました..これが私のXMLファイルです

<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();
    }

このコードを実行すると、複製されたページャーが表示されます..データを含むページャーを修正し、リストビューのヘッダーとして空のページャーを..ページャーにアダプターを設定しようとするとクラッシュします。 。 何か案が ?

4

2 に答える 2

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);
}
于 2014-01-16T06:09:52.687 に答える