java - Viewpager के साथ TabLayout चिकनी स्क्रॉलिंग नहीं है




android android-fragments (6)

मुझे लगता है कि आपको override विधि setUserVisibleHint का उपयोग करने की आवश्यकता है।

आपको इसे अपने Fragment में जोड़ना होगा।

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
       // fragment is no longer visible
    }
}

अपने offScreenPageLimit को अपने पास मौजूद offScreenPageLimit की संख्या बनाएं।

here setUserVisibleHint बारे में और पढ़ें।

संपादित करें

मैंने इस समस्या को ठीक करने के लिए इन ट्यूटोरियल का पालन किया है।

http://www.truiton.com/2015/06/android-tabs-example-fragments-viewpager/ https://guides.codepath.com/android/google-play-style-tabs-using-tablayout http://www.voidynullness.net/blog/2015/08/16/android-tablayout-design-support-library-tutorial/

लेकिन यह कई परेशानियों की कोशिश करने के बाद भी परेशान है कि समस्या अभी भी बनी हुई है। यहां जिस समस्या का सामना कर रहा है, उसके लिए डेमो यहां है। यह सप्ताह है क्योंकि मैं इस समस्या पर फंस गया हूं।

डेमो के लिए Link

परीक्षण के लिए मैं उपयोग कर रहे डिवाइस Nexus 4 और नेक्सस 5 हैं।

ViewPager साथ TabLayout चिकनी स्क्रॉल नहीं है। मुझे अगले टैप पर स्थानांतरित करने के लिए दो बार स्वाइप करने की आवश्यकता है। मैंने वेब के चारों ओर देखा है लेकिन कोई समाधान नहीं मिला। मैं नवीनतम समर्थन डिजाइन पुस्तकालय का उपयोग कर रहा हूँ। यहां gradle फ़ाइल है

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.softoven.ultron"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'org.jsoup:jsoup:1.6.1'
compile 'com.mikhaellopez:circularimageview:3.0.0'
compile 'com.android.support:recyclerview-v7:23.3.0'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.google.code.gson:gson:2.5'
}

यहां गतिविधि कोड है।

private DrawerLayout drawerLayout;
private ViewPager viewPager;
private TabLayout tabLayout;
private NavigationView navigationView;
private CategoriesDTO categoriesDTO;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initToolbar();
    initUi();
    loadCategories();
}

private void initToolbar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_menu);
}

private void initUi() {
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    navigationView = (NavigationView) findViewById(R.id.navigation);
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabLayout = (TabLayout) findViewById(R.id.tab);

}

private void loadCategories() {
    StringRequest request = new StringRequest(Constants.URL_GET_CATEGORIES, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            categoriesDTO = Constants.gson.fromJson(response, CategoriesDTO.class);
            ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
            viewPager.setOffscreenPageLimit(1);
            viewPager.setAdapter(adapter);
            setTabLayout();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

    ApplicationController.getmInstance().addToRequestQueue(request);
}

private void setTabLayout() {

    tabLayout.setupWithViewPager(viewPager);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.home_side_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

private class ViewPagerAdapter extends FragmentPagerAdapter {

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new ContentFragment();
    }

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title = categoriesDTO.getCategories().get(position).getTitle();
        return (CharSequence) title;
    }
}

और एक्सएमएल फ़ाइल

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tab"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabTextColor="#fff"
            app:tabGravity="fill"
            app:tabMode="scrollable"
            >

        </android.support.design.widget.TabLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

    </android.support.v4.view.ViewPager>
</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:menu="@menu/home_drawer_menu">

</android.support.design.widget.NavigationView>

स्क्रीनशॉट यहां आप देख सकते हैं कि सूचक आंशिक रूप से विभाजित है।

कोई भी समाधान?


अपनी एंड्रॉइड मेनिफेस्ट फ़ाइल में इस लाइन को <Application> टैग में जोड़ें

 android:largeHeap="true" 

एंड्रॉइड के समन्वय लेआउट और ऐपबार लेआउट के साथ यह कुछ भी नया नहीं है; मुझे यकीन है कि आप इसे आसान बनाने में सक्षम नहीं होंगे इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं। तथापि

https://github.com/henrytao-me/smooth-app-bar-layout

यह आपकी आवश्यकताओं को पूरा कर सकता है; हालांकि पहले से नमूना ऐप डाउनलोड करें

https://play.google.com/store/apps/details?id=me.henrytao.smoothappbarlayout

यह देखने के लिए कि क्या यह आपकी ज़रूरत के अनुरूप है। (बस सुनिश्चित करने के लिए)


कृपया ViewPager.setOffscreenPageLimit (1) सेट करें; Pager.setOffscreenPageLimit (5) देखने के लिए;


मैं बस आपके कोड के माध्यम से चला गया। समस्या यह है कि आप ContentFragment.java के अंदर बढ़ने के लिए कोई लेआउट नहीं दे रहे हैं।

मैंने आपकी विधि बदल दी

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //return super.onCreateView(inflater, container, savedInstanceState);
        return  inflater.inflate(R.layout.feed_item, container, false);

    }

इन परिवर्तनों को करने के बाद आपके टैब सुचारू रूप से स्क्रॉल कर रहे थे। मुझे इस व्यवहार के पीछे कारण पता नहीं है लेकिन इस बात ने इसे काम किया है


यदि आप किसी टुकड़े के भीतर टैबलाउट बनाने जा रहे हैं तो पैरामीटर के रूप में getSupportFragmentManager() बजाय getSupportFragmentManager() का उपयोग करें।

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());






android-tablayout