আমি আপনাকে এখন এটি একটি হ্যাক বলছি, সুতরাং সেই কারণে ডাউনভোট করার কোনও কারণ নেই। অর্থ, এটি হয় বিশেষভাবে আপনার জন্য সহায়ক হবে বা নাও। যে কোনও উপায়ে, নীচের বিবরণটি কিছু অন্তর্দৃষ্টি প্রদান করবে এবং সম্প্রদায়ের জন্য সহায়ক হবে। এছাড়াও, পুরানো এপিআইগুলির কাছে এই সমাধানটি ভাল ViewPager.getCurrentItem()
।
প্রথম, একটি সামান্য তথ্য। যদি আপনি পুনরুক্তি সঙ্গে একটি ViewPager অন্য সব লোকরা পুরনো ViewPager.getChildAt(x);
এবং প্রিন্ট আউট toString()
(অথবা getLeft()
) প্রতিটি শিশুর দেখুন (একটি পৃষ্ঠায়) এবং তারপর এই সব আপনি পৃষ্ঠাগুলি পরিবর্তন করেন, তখন আপনাকে লক্ষ্য করবেন যে শিশু যে তারা প্রদর্শিত হয় লজিক্যাল ক্রম হবে না আপনি যখন পৃষ্ঠাগুলি ফিরে যেতে শুরু করেন (শুরুতে পেজিং করা হয়)। স্পষ্টতই, এটি অ্যান থেকে অপ্রয়োজনীয় শিশুটিকে সরিয়ে ফেলবে এবং তারপরে অ্যারেতে নতুন শিশুটিকে যুক্ত করবে। সুতরাং, উদাহরণস্বরূপ, যাক আপনি 2 পৃষ্ঠার দিকে তাকিয়ে আছেন এবং এর পরে পৃষ্ঠা 3 এ পরিবর্তন করেছেন, আপনার বাচ্চাদের তালিকা এই ক্রমে থাকবে page 2, page 3, page 4
যার অর্থ ViewPager.getChildAt(1);
বর্তমান পৃষ্ঠাটি ফিরে আসবে। তবে, আপনি যদি দ্বিতীয় পৃষ্ঠায় ফিরে যান (পৃষ্ঠা 3 থেকে) আপনার বাচ্চাদের তালিকা এই ক্রমে থাকবে page 2, page 3, page 1
যার অর্থ এটিViewPager.getChildAt(1);
বর্তমান পৃষ্ঠাটি ফেরত দেয় না। এই তথ্যটি ব্যবহার করে আমি বর্তমান পৃষ্ঠায় আগাছা ফেলার সহজ যুক্তি খুঁজে পাইনি। কারণ পিছনে অ্যারেতে থাকা পৃষ্ঠাগুলি getChildAt
ক্রমটি স্বেচ্ছাসেবীর অর্ডারে থাকে ব্যবহারকারী কীভাবে চারপাশে পেজিং করে চলেছে তার ভিত্তিতে।
বলা হচ্ছে, আমি একটি হ্যাক ওয়ার্ক-ওয়ার্ড বিকাশ করেছি। এই ফাংশনটি সমস্ত পরিবেশে কাজ করবে কিনা আমার কোনও ধারণা নেই তবে এটি আমার বর্তমান প্রকল্পের জন্য কাজ করে। আমি সন্দেহ করব যদি এটি আপনার পক্ষে না হয় তবে এটি বিভিন্ন এপিআই স্তরের একটি ইস্যু। তবে আমি অন্যান্য পরিবেশের জন্য আসলে কোনও সমস্যা সন্দেহ করি না।
এখন, মাংস উপর। আমি যেটা লক্ষ্য করেছি তা হ'ল ফলাফলের ViewPager.getChildAt(x).getLeft()
প্যারেন্টের সাথে কিছু ধরণের অনুভূমিক পিক্সেল স্থানাঙ্ক থাকবে। সুতরাং, আমি এই তথ্যটি আগাছা করার জন্য ব্যবহার করেছি যেটি এখনকার দর্শন।
private int getCurrentPageIndex(ViewPager vp){
int first,second,id1,id2,left;
id1 = first = second = 99999999;
View v;
for ( int i = 0, k = vp.getChildCount() ; i < k ; ++i ) {
left = vp.getChildAt(i).getLeft();
if ( left < second ) {
if ( left < first ) {
second = first;
id2 = id1;
first = left;
id1 = i;
} else {
second = left;
id2 = i;
}
}
}
return id2;
}
এই ফাংশনটি সম্ভবত একটি প্রশ্নযুক্ত হ্যাক কারণ এটি getLeft()
এটিকে সমস্ত কিছু জানার মানের উপর নির্ভর করে । তবে, আমি প্রতিটি সন্তানের বাম স্থানাঙ্কটি দখল করি। আমি এর পরে অন্য মানগুলির সাথে এটি তুলনা করব এবং প্রথম এবং দ্বিতীয় পৃষ্ঠাগুলি সংরক্ষণ করব, দ্বিতীয় পৃষ্ঠাটি (বর্তমান পৃষ্ঠা) ফাংশনটির বাইরে রেখে। এটি সুন্দরভাবে কাজ করছে বলে মনে হচ্ছে।
কেন (আপনি জিজ্ঞাসা করতে পারেন) আমি কেবল ব্যবহার করিনি onClickListenter
বা যে কোনও সমাধান? ঠিক আছে, আমি নির্লিপ্ত হয়েছি যে শ্রোতা, অন্যান্য শ্রেণি, অনির্বাচিত ফোকাস এবং অন্যান্য ব্লাটকে অন্তর্ভুক্ত না করে এটি করার সহজ সরল উপায় ছিল। দুর্ভাগ্যক্রমে, এই সমাধান হুবহু সোজা সামনের দিকে নয়। তবে এটি ব্লাট, অন্যান্য শ্রেণি এবং শ্রোতাদের সাথে দূরে থাকবে। যদি আমি আরও সোজাভাবে এগিয়ে যেতে পারি তবে আমি এই ফাংশনটি আবার লিখব। অথবা হতে পারে, এটি অন্য কারও কাছে এপিফ্যানির অন্তর্দৃষ্টি দেবে।