प्रोग्रामेटिकली NestedScrollView के शीर्ष पर स्क्रॉल करें


82

क्या NestedScrollViewमाता-पिता के लिए स्क्रॉल इवेंट को ट्रिगर करके प्रोग्राम के शीर्ष पर स्क्रॉल करने का एक तरीका है ? smoothScrollTo(x, y)स्क्रॉल ईवेंट को नहीं सौंपता है NestedScrollingParent


अपने प्रश्न को अधिक स्पष्ट करें, क्या आपके कहने का मतलब यह है कि NestedScrollView समन्वयक लेआउट के अंदर कब है?
पियर बेटोस

किसी भी बिंदु पर
क्रमिक

जवाबों:


106
NestedScrollView.scrollTo(0, 0);

7
मैं आपको NestedScrollView.scrollTo(0, 0);शीर्ष पर स्क्रॉल करने के लिए उपयोग करने के लिए कह रहा हूं NestedScrollView। आपका स्वागत है।
SilentKnight

यह आमतौर पर स्क्रॉलव्यू या नेस्ट्सक्रॉलव्यू दोनों पर लागू होता है।
रॉबर्ट

42

मैं इसे करने में कामयाब रहा (एनिमेटेड स्क्रॉलिंग):

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
    behavior.onNestedFling(coordinatorLayout, appBarLayout, null, 0, 10000, true);
}

जहां 10000y- दिशा में वेग है।


1
यदि आप केवल मेरे मामले में appbarlayout छिपाने के लिए स्क्रॉल करना पसंद करते हैं, तो आप behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);इसे उलटने के लिए कर सकते हैंbehavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);
k0sh

3
धन्यवाद। नेस्टसेक्रोलव्यू के नीचे स्क्रॉल करने के तरीके पर कोई विचार?
बिबू जू

जब AppBarLayout का विस्तार किया जाता है, तो नेस्टेड फ़्लिंग का अनुकरण करते हुए इसे ध्वस्त कर दिया जाएगा (जो कि शानदार है), लेकिन इससे नस्टेडस्क्रॉल व्यू एक ही समय में नीचे स्क्रॉल नहीं होगा ...
राफेल रॉययर-रिवार्ड

इसके अलावा, जब AppBarLayout पूरी तरह से ढह जाता है, तो नकारात्मक y वेग मान का उपयोग करने से इसका विस्तार नहीं होगा।
राफेल रॉयर-रिवार्ड

33

NestedScrollViewसभी तरह से ऊपर या नीचे स्क्रॉल करने का एक और तरीका fullScroll(direct)फ़ंक्शन का उपयोग कर रहा है

nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);

fullScroll (View.FOCUS_UP) छिपा हुआ ऐपबार नहीं निकल रहा है। कोई भी विचार
शब्बीर धनंगोट

@ सब्बीर धनगोट ने क्या आपने अपने NestedScrollViewएम्बर के नीचे लेआउट किया था ?
MeLine

मेरा एक सवाल है कि मैं देख सकता हूं कि फुलसक्रोल एक दृश्य प्राप्त करता है। अगर मैं एक निश्चित टेक्स्टव्यू, एडिटेक्स, या पुनर्नवीनीकरण पर स्क्रॉल करना चाहता हूं तो क्या वह इसे स्क्रॉल करेगा?
फेलिप फ्रेंको

22

मेरे लिए कुछ भी काम नहीं किया, और मुझे नहीं पता कि यह क्यों काम किया, लेकिन यहां मेरा समाधान और समस्या है।

नेस्टेड स्क्रॉल दृश्य में पुनर्नवीनीकरण दृश्य जोड़ते समय, उस गतिविधि के लिए स्क्रीन पर पुनर्नवीनीकरण दृश्य दिखाई देता है। सभी तरह से ऊपर स्क्रॉल करने के लिए, मुझे इसका उपयोग करना पड़ा:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.details_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
ProductDescriptionAdapter adapter = new ProductDescriptionAdapter(this);
adapter.setData(mProduct.getDetails());
recyclerView.setAdapter(adapter);
NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scroll);
scrollView.getParent().requestChildFocus(scrollView, scrollView);

5
Wooooow, यह सबसे अच्छा है, दामेट Garm
abbasalim

11
यदि किसी की समस्या यह है कि नेस्टेड स्क्रॉल दृश्य के अंदर का रिसाइकलव्यू पहले से ही आधा रास्ता स्क्रॉल कर रहा है, तो गतिविधि में प्रवेश करते समय, XML के रूट के शीर्ष शीर्ष तत्व को निम्न प्रॉपर्टी में सेट करने का प्रयास करें Android: focusableInTouchMode = "true"
user1025013

1
यह समाधान पूरी तरह से काम करता है, जहां स्क्रॉलव्यू। सीरोलटू (0,0) के रूप में; बिल्कुल काम नहीं करता है।
तरणजीतसरा

4
यह काम किया:scrollView.getParent().requestChildFocus(scrollView, scrollView);
राजीव साहू

1
एक जादू की तरह काम किया। धन्यवाद
Vinoth ios

21

मुझे भी इसी तरह के परिदृश्य का सामना करना पड़ा। मेरे मामले में जब मैं नीचे स्क्रॉल करता हूं, तो FAB बटन दिखाई देता है और जब उपयोगकर्ता उस FAB बटन पर टैप करता है, तो पृष्ठ के शीर्ष पर जाना चाहिए। उसके लिए मैंने @SilentKnight उत्तर जोड़ा NestedScrollView.scrollTo(0, 0);शीर्ष पर जाने के लिए लेकिन जो स्क्रॉल करने के लिए चिकनी एनीमेशन के लिए पर्याप्त नहीं है।
सुगम एनीमेशन के लिए मैंने @Sharj उत्तर का उपयोग किया है जो कि है, NestedScrollView.fullScroll(View.FOCUS_UP); लेकिन फिर मेरा AppBar वहाँ दिखाई नहीं दे रहा है क्योंकि मुझे निम्नलिखित के रूप में AppBar का विस्तार करना है appBarLayout1.setExpanded(true)। इसलिए इन तीनों का उपयोग करके मैं पृष्ठ के शीर्ष पर आसानी से जा सकता हूं।

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
appBarLayout1.setExpanded(true);

5
appBarLayout1.setExpanded (सच); - मेरे लिए काम किया! धन्यवाद :)
आंद्रेई

धन्यवाद! यह सबसे सही उत्तर है, विशेष रूप से जब appbarlayout का उपयोग करते हैं
demogorgorn

11

आप आसानी से NestedScrollView स्तर पर स्क्रॉल नकली कर सकते हैं। आप मूल रूप से कोऑर्डिनेटर लयआउट को बताते हैं कि आपने टूलबार की ऊंचाई तक स्क्रॉल किया है।

    NestedScrollView nestedScrollView = (NestedScrollView) getActivity().findViewById(R.id.your_nested_scroll_view);

    int toolbarHeight = getActivity().findViewById(R.id.toolbar).getHeight();

    nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
    nestedScrollView.dispatchNestedPreScroll(0, toolbarHeight, null, null);
    nestedScrollView.dispatchNestedScroll(0, 0, 0, 0, new int[]{0, -toolbarHeight});
    nestedScrollView.scrollTo(0, nestedScrollView.getBottom());

एकमात्र उत्तर जो मेरे लिए काम करता है! मुझे समन्वयक लेआउट में स्क्रॉल करने की आवश्यकता थी (इसलिए nestedScrollView और collapsibleToolbar दोनों)। मैंने मौजूदा कोड का उपयोग किया, लेकिन टूलबारहाइट को बदल कर Integer.MIN_VALUE और -toolbarHeight को Integer.MAX_VALUE में बदल दिया गया (क्योंकि मुझे इसके विपरीत परिवर्तन की आवश्यकता है)। और फिर मैं appBarLayout.setExpanded (सच्चा, सच्चा) कहता हूं; धन्यवाद!
विकटोरिया चेबतोर

9

आप इसे स्मूथ स्क्रॉल के लिए उपयोग कर सकते हैं।

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);

या सामान्य स्क्रॉल के लिए

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);

जीआर 8 नौकरी। आप मेरा समय बचाते हैं
प्रियंका जी

7

मैंने उपरोक्त सभी प्रतिक्रियाओं की कोशिश की, कुछ भी नहीं लग रहा था, लेकिन मुझे केवल पोस्टडेलिड की आवश्यकता थी।

    scrollview.postDelayed(new Runnable() {
        @Override
        public void run() {
            listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated);
            scrollview.fullScroll(View.FOCUS_DOWN);
        }
    }, 400);

6

कुछ समय NestedScrollView.scrollTo(0, 0);और scrollview.pageScroll(View.FOCUS_UP);काम नहीं करता है

उस पर आपको उपयोग करने की आवश्यकता है fling()और smoothScrollTo()एक साथ

नमूना कोड

nestedScrollView.post {
   nestedScrollView.fling(0)
   nestedScrollView.smoothScrollTo(0, 0)
}

2

मेरे लिए दो बार .worked लाइन जोड़ें

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.fullScroll(View.FOCUS_UP);

1

शीर्ष पर स्क्रॉल करने के बजाय View.scollTo (int x, int y) का उपयोग करें।

findViewById({your NestedScrollView resource id}).scrollTo(0, 0);

0

जब मुझे RecyclerView के साथ उपयोग किया गया तो मुझे NestedScrollView के साथ समस्या थी। इस कोड ने मेरे लिए काम किया: nestedScrollView !!। GetParent ()। RequestChildFocus (nestedScrollView, nestedScrollView);

    val recyclerViewSearch = activity?.findViewById<RecyclerView>(R.id.recycler)
    recyclerViewSearch.setAdapter(setAdapterSearch())

    val nestedScrollView = activity?.findViewById<NestedScrollView>(R.id.bottom_sheet_Search)
    nestedScrollView!!.getParent().requestChildFocus(nestedScrollView, nestedScrollView);

0

जब RecyclerView NestedScrollView के अंदर होता है तो मैं RecyclerView के आइटम पर स्क्रॉल करता हूं

सबसे पहले, आप चाहते हैं कि एक item heightस्क्रॉल प्राप्त करें position

val itemHeight =
    binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height
binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.