প্রোগ্রামিয়ালি কোনও অ্যান্ড্রয়েড তালিকাভিউতে একটি নির্দিষ্ট অবস্থানে স্ক্রোল করুন


157

আমি কীভাবে প্রোগ্রামে কোনও নির্দিষ্ট অবস্থানে স্ক্রোল করতে পারি ListView?

উদাহরণস্বরূপ, আমার কাছে একটি আছে String[] {A,B,C,D....}এবং আমার ListViewআমার 21 এর সূচীতে শীর্ষস্থানীয় দৃশ্যমান আইটেমটি সেট করতে হবে String[]



আমার উত্তরটি এখানে দেখুন, stackoverflow.com/a/29345217/1881527
মেলবোর্ন লোপস

উত্তর:


386

সরাসরি স্ক্রোলের জন্য:

getListView().setSelection(21);

একটি মসৃণ স্ক্রোল জন্য:

getListView().smoothScrollToPosition(21);

কুল, আমি ঠিক এটাই চাই!
jiasli

দুর্দান্ত, খুব দরকারী ts এটি আমার সময় সাশ্রয় করে। ধন্যবাদ।
নেহা আগরওয়াল

আরেকটি পার্থক্য: প্রথমটি তালিকার মাঝখানে স্থাপন করার চেষ্টা করে।
ভিক্টর পিন্টো

11
smoothScrollToPositionকাজ করছে না, কোন পরামর্শ?
সুইটওয়িশার ツ

1
@ সুইটওয়িশার the মৃত্যুদন্ড কার্যকর করতে বিলম্ব করার চেষ্টা করুন, এরকম কিছু:listView.post(() -> listView.smoothScrollToPosition());
অ্যান্ডি রেস

64

স্ক্রোল সময়কাল সহ একটি স্মুথস্ক্রোল জন্য:

getListView().smoothScrollToPositionFromTop(position,offset,duration);

প্যারামিটারের
অবস্থান ->
অফসেটে স্ক্রোল করার অবস্থান ----> স্ক্রোলিংয়ের
সময়সীমা শেষ হওয়ার পরে অবস্থানের শীর্ষস্থান থেকে পিক্সেলগুলিতে পছন্দসই দূরত্ব-> স্ক্রোলটির জন্য ব্যবহারের জন্য মিলিসেকেন্ডের সংখ্যা

দ্রষ্টব্য: এপিআই 11 থেকে

হ্যান্ডলারএক্সপ্লয়েটের উত্তরটি আমি যা খুঁজছিলাম তা ছিল তবে আমার তালিকাভিউটি বেশ দীর্ঘ এবং বর্ণমালা স্ক্রোলারের সাথেও রয়েছে। তখন আমি দেখতে পেলাম যে একই ফাংশনটি অন্যান্য প্যারামিটারগুলিও নিতে পারে :)


সম্পাদনা: (এএফডি পরামর্শ থেকে)

বর্তমান নির্বাচন অবস্থান:

int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();

mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);  

ঠিকভাবে কাজ করে. আপনার উত্তরটি উন্নত করতে, অফসেটটি স্ট্যাকওভারফ্লো
এএফডি

v.getHeight () কী?
পানাহে

@ পানে ভি এই তালিকা দেখার সারিতে রয়েছে
অমলবিত 6'18

আমি আপনাকে ইউউউউউউউ করি
জোয়াও

10

হ্যান্ডলারে আপনার কোডটি নিম্নরূপ রাখুন,

public void timerDelayRunForScroll(long time) {
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() {           
            public void run() {   
                try {
                    lstView.smoothScrollToPosition(YOUR_POSITION);
                } catch (Exception e) {}
            }
        }, time); 
    }

এবং তারপরে এই পদ্ধতিটি কল করুন,

timerDelayRunForScroll(100);

চিয়ার্স !!!


7

আমি অনগ্রুপ এক্সপ্যান্ডলাইস্টেনার সেট করেছি এবং গ্রুপ-এক্সপান্ডে ওভাররাইড () হিসাবে:

এবং setSelectionFromTop () পদ্ধতিটি ব্যবহার করুন যা নির্বাচিত আইটেমটি সেট করে এবং তালিকাগুলির উপরের প্রান্ত থেকে নির্বাচন y পিক্সেলকে রাখে। (যদি টাচ মোডে থাকে তবে আইটেমটি নির্বাচন করা হবে না তবে এটি যথাযথভাবে স্থাপন করা হবে)) (অ্যান্ড্রয়েড ডক্স)

    yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
    {

        @Override
        public void onGroupExpand(int groupPosition) {

            expList.setSelectionFromTop(groupPosition, 0);
            //your other code
        }
    });

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

7

Listviewস্ক্রল ডিফল্টরূপে শীর্ষে স্থান হবে, কিন্তু চান স্ক্রল যদি দৃশ্যমান নয় তাহলে এই ব্যবহার করুন:

if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
            listView1.setSelection(position);

ধন্যবাদ @ জালাক আমার সমস্যা সমাধান করুন, আপনাকে ছেড়ে দিন
মিতুল ভাদেশিয়া

5

যদি কেউ জিমেইল অ্যাপের মতো অনুরূপ কার্যকারিতা খুঁজছেন,

তালিকার ভিউ স্ক্রোলটি ডিফল্টরূপে শীর্ষে অবস্থান করা হবে। ইঙ্গিতটির জন্য ধন্যবাদ। amalBit। শুধু এটি বিয়োগ। এটাই.

 Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            int h1 = mDrawerList.getHeight();
            int h2 = header.getHeight();
            mDrawerList.smoothScrollToPosition(h2-h1);
        }
    }, 1000);

4

হ্যান্ডলিং তালিকাটি ইউপি / ডাউন ব্যবহার করে স্ক্রলিং দেখুন.বাটন ব্যবহার করুন

যদি কেউ তালিকা পরিচালনা করতে আগ্রহী হয় তবে বোতামটি ব্যবহার করে এক সারি উপরে / নিচে দেখুন। তারপর।

public View.OnClickListener onChk = new View.OnClickListener() {
             public void onClick(View v) {

                 int index = list.getFirstVisiblePosition();
                 getListView().smoothScrollToPosition(index+1); // For increment. 

}
});

কেবলমাত্র আপনিই সেই বর্তমান অবস্থানটি পাওয়ার উপায় দেখিয়েছেন বলে আপনাকে ভোট দিয়েছি, তবে আপনার উদাহরণের উন্নতি করা উচিত।
পানসিজ

4

আপনি যদি কোনও তালিকায় পছন্দসই অবস্থানে সরাসরি যেতে চান তবে কেবলমাত্র ব্যবহার করুন

listView.setSelection (int অবস্থান);

এবং আপনি যদি তালিকাভিউতে পছন্দসই অবস্থানে সহজেই ঝাঁপিয়ে পড়তে চান তবে কেবল ব্যবহার করুন use

listView.smoothScrollToPosition (int পজিশন);


3

এটিই আমার পক্ষে কাজ করেছিল। অমলবিট এবং মেলবোর্ন লোপস দ্বারা উত্তরগুলির সংমিশ্রণ

public void timerDelayRunForScroll(long time) {
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() {           
        public void run() {   
            try {
                  int h1 = mListView.getHeight();
                  int h2 = v.getHeight();

                  mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);  

            } catch (Exception e) {}
        }
    }, time); 
}

এবং তারপরে এই পদ্ধতিটি কল করুন:

timerDelayRunForScroll(400);

1

এর সহজ তালিকা-প্রদর্শন.সেট নির্বাচন (আপনি পোস্ট করুন); বা আপনি যখন নিজের কার্যকলাপ শুরু করেন তখন আপনি নিজের অবস্থান ভাগ করে নিতে পারেন এবং যখন আপনি কার্যকলাপ শুরু করেন তখন পছন্দটি এবং সেটটিলেশন পেতে পারেন


আমি যা করতে চেয়েছিলাম তা কোনও স্ক্রলিং অ্যানিমেশন ছাড়াই স্বয়ংক্রিয়ভাবে তালিকার শীর্ষে চলে যেতে হয়েছিল ... এটি এর জন্য পুরোপুরি কাজ করেছে
RH201

1

-যদি আপনি কেবল তালিকাটি \ ভোর একটি নির্দিষ্ট অবস্থানে নিয়ে যেতে চান:

myListView.smoothScrollToPosition(i);

- আপনি যদি মাইলিস্টভিউতে একটি নির্দিষ্ট আইটেমের অবস্থান পেতে চান:

myListView.getItemAtPosition(i);

- এছাড়াও এটি myListView.getVerticalScrollbarPosition(i);আপনাকে সহায়তা করতে পারে।

শুভকামনা :)


0

একটি তালিকার স্ক্রোল অবস্থানটি সঠিকভাবে সংজ্ঞায়িত করতে আপনার দুটি জিনিস দরকার ভিউ:

বর্তমান তালিকাটি দেখতে স্ক্রোলের অবস্থান দেখুন:

int firstVisiblePosition = listView.getFirstVisiblePosition(); 
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.

তালিকাটি সেট করতে ভিউ স্ক্রোল অবস্থান:

listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo.. 
listView.scrollTo(0,-topEdge);

-1

দুটি পৃথক বোতাম ব্যবহার করে উপরে স্ক্রোলটি উপরে উঠার অনুমতি দেওয়ার জন্য আমি এই সমাধানটি পেয়েছি।

@ নেপস্টার দ্বারা প্রস্তাবিত হিসাবে আমি বর্তমান অবস্থানটি পেতে getFrstVisiblePosition () এবং getLastVisiblePosition () ব্যবহার করে প্রোগ্রামটিমে স্ক্রোলটি বাস্তবায়ন করি।

final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
    .....

        if (list.size() > 0) {
            ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
            bnt.setVisibility(View.VISIBLE);
            bnt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
                        lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
                    }else{
                        lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());

                    }
                }
            });
            bnt = (ImageButton) findViewById(R.id.up_action);
            bnt.setVisibility(View.VISIBLE);

            bnt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(lwresult.getFirstVisiblePosition()>0){
                        lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
                    }else{
                        lwresult.smoothScrollToPosition(0);
                    }

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