ক্রিয়াকলাপের শুরুতে স্ক্রোলভিউতে কীভাবে নীচে স্ক্রোল করবেন


96

আমি একটি স্ক্রোলভিউতে কিছু তথ্য প্রদর্শন করছি। ক্রিয়াকলাপ সূচনায় (পদ্ধতিতে ক্রিয়েট) আমি স্ক্রোলভিউটি ডেটা দিয়ে পূর্ণ করি এবং নীচে স্ক্রোল করতে চাই।

আমি ব্যবহার করার চেষ্টা করেছি getScrollView().fullScroll(ScrollView.FOCUS_DOWN)। আমি এটিকে বোতাম ক্লিকের ক্রিয়া হিসাবে তৈরি করলে এটি কাজ করে তবে এটি অনক্রিট পদ্ধতিতে কাজ করে না।

ক্রিয়াকলাপটি কার্যকলাপের সূচনাতে নীচে স্ক্রোল করার কী কোনও উপায় আছে? এর অর্থ প্রথমবার প্রদর্শিত হলে ভিউ ইতিমধ্যে নীচে স্ক্রোল করা।


এটিও ব্যাখ্যা করে যে আমি যখন স্ক্রোলভিউয়ের নিজস্ব সাবক্লাসটি শুরু করার সময় getMeasuredWidth ব্যবহার করার চেষ্টা করছিলাম তখন কেন আমি সর্বদা 0 থাকছিলাম।
ঘোটি

উত্তর:


218

এটি নিম্নলিখিত হিসাবে করা প্রয়োজন:

    getScrollView().post(new Runnable() {

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

এই উপায়ে প্রথমে আপডেট হয় এবং তারপরে "নতুন" নীচে স্ক্রোল করে।


4
আমি ঠিক এটি চেষ্টা করছি কিন্তু এটি এখনও কাজ করে বলে মনে হচ্ছে না ... আপনি কি উপরের কোডটি onCreateধারণ করে কল করছেন Activity?
pstanton

আমি এটি স্টার্টে করছি
পলো

4
পরিবর্তে পোস্ট () 100 মিমি বিলম্ব সহ পোস্টডেলেড () ব্যবহার করুন। এটি যে কোনও ক্রিয়াকলাপ থেকে জীবন চক্র বিন্দু থেকে কাজ করবে।
ভিটালিয়া এ

50

আপনার ডেটা যুক্ত হওয়ার পরে নিম্নলিখিত কোডটি রাখুন:

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

4
আমার জন্য এটি কেবল পোস্টের পরিবর্তে একটি পোস্টডিলিয়েডের সাথে কাজ করেছিল। বিলম্বের মাত্র 100 মিলিসেকেন্ড।
আন্দ্রেয়াস রুডলফ

পারফেক্ট অবশ্যই স্ক্রোলভিউ.ফুলসক্রল (স্ক্রোলভিউ.ফোকাস_উপ) সহ কম্বো সহ;
ieselisra

30

এটি আমার পক্ষে কাজ করে:

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

4
এখনও পর্যন্ত এই প্রশ্নের সেরা উত্তর। প্রচুর অন্যান্য পদ্ধতির শর্তসাপেক্ষ তবে এটি দুর্দান্ত কাজ করেছে দুর্দান্ত কাজ করে :)
রানা

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

আপনার ইউআই উপাদান সূচনা করার পরে এবং এটি ডেটা দিয়ে পূরণ করুন। আপনার তৈরি পদ্ধতিতে সেই লাইনটি যুক্ত করুন

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);
                }
            });
        }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.