एक्टिविटी स्टार्टअप पर स्क्रॉल में नीचे स्क्रॉल कैसे करें


96

मैं स्क्रॉल डेटा में कुछ डेटा प्रदर्शित कर रहा हूं। गतिविधि स्टार्टअप पर (विधि चालू करें) मैं डेटा के साथ स्क्रॉल दृश्य भरता हूं और नीचे तक स्क्रॉल करना चाहता हूं।

मैंने इस्तेमाल करने की कोशिश की getScrollView().fullScroll(ScrollView.FOCUS_DOWN)। यह तब काम करता है जब मैं इसे बटन क्लिक पर कार्रवाई के रूप में बनाता हूं, लेकिन यह ऑनक्रिएट विधि में काम नहीं करता है।

क्या गतिविधि स्टार्टअप पर स्क्रॉल करने के लिए नीचे की ओर स्क्रॉल करने का कोई तरीका है? इसका मतलब है कि पहली बार प्रदर्शित होने पर दृश्य पहले से ही नीचे तक स्क्रॉल किया जाता है।


यह भी बताता है कि मुझे हर समय 0 क्यों मिल रहा था जब मैं एक स्क्रॉल दृश्य के अपने उपवर्ग को शुरू करते हुए getMeasuredWidth का उपयोग करने की कोशिश कर रहा था।
घोटी

जवाबों:


218

इसे निम्नानुसार किया जाना चाहिए:

    getScrollView().post(new Runnable() {

        @Override
        public void run() {
            getScrollView().fullScroll(ScrollView.FOCUS_DOWN);
        }
    });

इस तरह से दृश्य को पहले अपडेट किया जाता है और फिर "नए" तल पर स्क्रॉल किया जाता है।


1
मैं कोशिश कर रहा हूँ वास्तव में यह लेकिन यह अभी भी काम करने के लिए ... आप में उपरोक्त कोड बुला रहे हैं प्रतीत नहीं होता onCreateयुक्त Activity?
पैंसेंटन

मैं इसे onStart
Palo

4
पोस्ट के बजाय () पोस्ट का उपयोग करें पोस्टलेड () 100ms देरी के साथ। यह किसी भी गतिविधि जीवन-चक्र बिंदु से काम करेगा।
विटाली ए

50

अपना डेटा जोड़ने के बाद निम्नलिखित कोड डालें:

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        scrollview.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

4
मेरे लिए यह केवल पोस्ट के बजाय पोस्टडेलड के साथ काम किया। सिर्फ 100 मिली देरी से।
एंड्रियास रुडोल्फ

उत्तम। स्क्रॉलव्यू के साथ बेशक कॉम्बो के साथ ।fullScroll (ScrollView.FOCUS_UP);
१.४६ बजे

30

यह मेरे लिए काम करता है:

scrollview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        scrollview.post(new Runnable() {
            public void run() {
                scrollview.fullScroll(View.FOCUS_DOWN);
            }
        });
    }
});

2
इस प्रश्न के लिए अब तक का सर्वश्रेष्ठ उत्तर। अन्य दृष्टिकोण के बहुत सारे सशर्त हैं, लेकिन यह एक बढ़िया काम करता है सुपर ठीक है :)
राणा

17

आप इसे लेआउट फ़ाइल में कर सकते हैं:

                android:id="@+id/listViewContent"
                android:layout_width="wrap_content"
                android:layout_height="381dp" 
                android:stackFromBottom="true"
                android:transcriptMode="alwaysScroll">


4

इसे इस्तेमाल करे

    final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
    scrollview.post(new Runnable() {
       @Override
       public void run() {
         scrollview.fullScroll(ScrollView.FOCUS_DOWN);
       }
    });

3

आपके द्वारा दृश्य में डेटा जोड़ने के बाद इस एकल पंक्ति को जोड़ें:

yourScrollview.fullScroll(ScrollView.FOCUS_DOWN);

1

अपने UI घटक को इनिशियलाइज़ करने के बाद और इसे डेटा से भरें। बनाने की विधि पर उन लाइन को अपने में जोड़ें

Runnable runnable=new Runnable() {
        @Override
        public void run() {
            scrollView.fullScroll(ScrollView.FOCUS_DOWN);
        }
    };
    scrollView.post(runnable);

1

यह ऐसा करने का सबसे अच्छा तरीका है।

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            scrollView.post(new Runnable() {
                @Override
                public void run() {
                    scrollView.fullScroll(View.FOCUS_DOWN);
                }
            });
        }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.