带有ViewPager的Android AppCompatActivity和包含scrollview的片段 - 滚动手势无法正常运行

时间:2015-10-14 06:31:43

标签: android android-fragments android-viewpager android-scrollview

我正在尝试解决这个问题很长一段时间。我有一个包含ViewPager的AppCompatActivity。除非包含滚动视图的片段显示在屏幕上,否则一切正常。从那一点开始,列表视图垂直滚动运动非常抖动以及viewpager的水平移动。我真的不知道如何让它一起工作。

我的活动代码:

public class MyMeeatie extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener, RateFragment.OnFragmentInteractionListener,
                MyMeeatieFragment.OnFragmentInteractionListener, StatisticsFragment.OnFragmentInteractionListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_meeatie);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setLogo(R.drawable.meeatie_logo_top);


    final ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager_my_meeatie);
    setupViewPager(viewPager);

    TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout_my_meeatie);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}


private void setupViewPager(final ViewPager viewPager) {

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    adapter.addFrag(MyMeeatieFragment.newInstance(),getString(R.string.my_meeatie));
    adapter.addFrag(StatisticsFragment.newInstance(), getString(R.string.statistics));
    adapter.addFrag(RateFragment.newInstance(), getString(R.string.rate));


    viewPager.setAdapter(adapter);
    viewPager.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent e) {
            // How far the user has to scroll before it locks the parent vertical scrolling.
            final int margin = 10;
            final int fragmentOffset = v.getScrollX() % v.getWidth();

            if (fragmentOffset > margin && fragmentOffset < v.getWidth() - margin) {
                viewPager.getParent().requestDisallowInterceptTouchEvent(true);
            }
            return false;
        }
    });
}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my_meeatie, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camara) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_send) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

@Override
public void onFragmentInteraction(Uri uri) {

}

@Override
public void onFragmentInteraction(String id) {

}
}

示例片段布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="pl.creative.meeatie.mobile.fragments.MyMeeatieFragment">

<ListView android:id="@+id/my_meeatie_lv"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

我非常感谢你的帮助。

0 个答案:

没有答案