যখন ভিউপেজার পৃষ্ঠাগুলি পরিবর্তন করে তা নির্ধারণ করুন


146

আমার ভিউপিজারের ভিতরে তিনটি পৃষ্ঠা (টুকরা) রয়েছে, তবে আমি কেবলমাত্র সেই দুটি পৃষ্ঠার জন্য একটি মেনু আইটেম প্রদর্শন করতে চাই।

পূর্ববর্তী এসও উত্তরে প্রদত্ত কোডটি কাজ করে বলে মনে হচ্ছে না:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser == true) { }
    else if (isVisibleToUser == false) {  }

}

Eclipse বলছে @ ওভাররাইডের দরকার নেই এবং সুপার সেট করা যায় না। এটি কখনই সিস্টেম দ্বারা ডাকা হয় না, এমনকি যদি তা হয় তবে আমি নির্ধারণ করব যে এই মুহুর্তে কোন পৃষ্ঠাটি প্রদর্শিত হচ্ছে? আমি কি এখানে কিছু সাহায্য করতে পারি?


1
এটি আমার জন্য কাজ করেছে এবং প্রদত্ত সমাধানটি কীভাবে ব্যবহার করতে হবে সে সম্পর্কে আরও কিছু প্রসঙ্গ দেয়: খণ্ডের ভিতরে ভিউপ্যাজারের ট্যাব পরিবর্তন সনাক্ত করুন
gcl1

উত্তর:


282

ব্যবহার করুন ViewPager.onPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    public void onPageScrollStateChanged(int state) {}
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    public void onPageSelected(int position) {
        // Check if this is the page you want.
    }
});

48
আপনি তার পরিবর্তে একটি সিম্পলঅনপেজ চ্যাঞ্জলিস্টনার ব্যবহার করতে পারেন এবং কেবলমাত্র পেজসিলিটেড ওভাররাইড করতে পারেন
ক্লকস্মিত

118

ViewPager.setOnPageChangeListenerএখন অবচয় করা হয়েছে। ViewPager.addOnPageChangeListenerপরিবর্তে আপনার এখন ব্যবহার করা উচিত।

উদাহরণ স্বরূপ,

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

3
আমি বুঝতে পারি না বলে মনে হচ্ছে। আমি এক পরম সূচনা। সুতরাং আমরা কি এই পদ্ধতির ভিতরে রাখি। দয়া করে আমাকে কোথায় শিখতে সাহায্য করুন addOnPageChangeListener
কারু বেনসন কারু

তথ্যের জন্য +1, তবে এই দুটিয়ের পার্থক্য কী ViewPager.SimpleOnPageChangeListenerএবং ViewPager.OnPageChangeListenerউপরে উল্লিখিত কোনটি হিসাবে?
রওক রউক

2
সরলঅনপেজ চ্যাঞ্জলিস্টনার সহ @ রোকক আপনার কেবলমাত্র সেই পদ্ধতিগুলিকেই ওভাররাইড করতে হবে যা আপনি প্রকৃতপক্ষে ব্যবহার করতে চান। উদাহরণস্বরূপ স্ট্যাকওভারফ্লো . com/a/31961397/608312 দেখুন ।
জেক লি

37

আপনি কেবল সেই পদ্ধতিগুলি ViewPager.SimpleOnPageChangeListenerপরিবর্তে ব্যবহার করতে ViewPager.OnPageChangeListenerএবং ওভাররাইড করতে পারেন যা আপনি ব্যবহার করতে চান।

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

    // optional 
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

    // optional 
    @Override
    public void onPageSelected(int position) { }

    // optional 
    @Override
    public void onPageScrollStateChanged(int state) { }
});

এই সাহায্য আশা করি :)

সম্পাদনা করুন: অ্যান্ড্রয়েড এপিআই অনুসারে, setOnPageChangeListener (ViewPager.OnPageChangeListener listener)হ্রাস করা হয়েছে। দয়া করে এই url টি পরীক্ষা করুন: - অ্যান্ড্রয়েড ভিউপাগার এপিআই


1
যেমনটি mViewPager.setOnPageChangeListener();এখন অবহেলিত, এইটি ভাল কাজ করছে।
বিএসটি কালের

উপরের কোডে, কোনও রাজ্য বর্তমান অবস্থানটি সংরক্ষণ করে পরিবর্তন করেছে কিনা তা সনাক্ত করতে এবং পৃষ্ঠাটি অনপেজস্ক্রোলড পদ্ধতিতে স্ক্রোল করা হলে তার সাথে তুলনা করুন।
অনুপমচুগ

14

কোটলিন ব্যবহারকারী ,

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

            }

            override fun onPageSelected(position: Int) {
            }
        })

ভিউপ্যাজার 2 এর জন্য 2020 আপডেট করুন

        viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageScrollStateChanged(state: Int) {
            println(state)
        }

        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            println(position)
        }


        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            println(position)
        }
    })

11

ভিউপ্যাজার 2 এর জন্য,

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})

যেখানে OnPageChangeCallbackতিনটি পদ্ধতি সহ স্থির শ্রেণি রয়েছে:

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.