ভিউপাগারকে অফ-স্ক্রিন ভিউগুলি ধ্বংস করতে বাধা দিন


133

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

এই মতামতগুলি সমস্ত সাধারণ তালিকা এবং এই অপটিমাইজেশনটি সম্পূর্ণ অপ্রয়োজনীয়, তাই আমি এটিকে অক্ষম করতে চাই। এটি কিছু ভিজ্যুয়াল সমস্যা সৃষ্টি করছে কারণ তালিকাগুলিতে লেআউট অ্যানিমেশনগুলি প্রয়োগ হয়েছে এবং সেগুলি অ্যানিমেশনগুলি ধ্বংস এবং পুনরায় তৈরি করার পরে পুনরায় খেলানো হবে। এটি প্রতিবার স্ক্রোলবার অন্তর অ্যানিমেশনটিও দেখায় (যেখানে স্ক্রোলবারটি সংক্ষিপ্তভাবে প্রদর্শিত হয় যে স্ক্রোলিং সম্ভব তা নির্দেশ করে) যা বিভ্রান্তিকর হতে পারে এবং ব্যবহারকারীর বর্তমান স্ক্রোল অবস্থানটি প্রক্রিয়াটিতে হারিয়ে যায়।

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

ভিউপ্যাজারকে এই আচরণ বন্ধ করতে এবং আমার সমস্ত টুকরোগুলি স্মৃতিতে রাখার জন্য কী বোঝানোর কোনও উপায় আছে?

উত্তর:


332

ইন সংস্করণ 4 সাপোর্ট প্যাকেজ এর একটি পদ্ধতি ViewPager যা বরং ডিফল্ট যা 1 পরিবর্তে, আপনার ব্যবহারের জন্য offscreen পৃষ্ঠার সংখ্যার নির্দিষ্ট করার অনুমতি দেয় যোগ করা হয়েছিল।

আপনার ক্ষেত্রে, আপনি 2 টি নির্দিষ্ট করতে চান, যাতে আপনি যখন তৃতীয় পৃষ্ঠায় থাকেন, প্রথমটি ধ্বংস হয় না এবং তদ্বিপরীত হয়।

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);

কোনও ধারণা কীভাবে এটি একটি কভারফ্লোতে করবেন?
জোসেফাস

4
হ্যালো. আমি যা নিয়ে কাজ করছি তাতে টুকরা / পৃষ্ঠাগুলি গতিশীলভাবে তৈরি হয়ে যায় তাই সম্ভাব্য খণ্ডগুলির অনির্দিষ্ট সংখ্যক সংখ্যা রয়েছে। এই ক্ষেত্রে, এটি সাধারণত 10 বা তারও কম যায়। এই পৃষ্ঠাগুলির এই সমাধানটি ব্যবহার করা কি মেমরির দুর্বল ব্যবহার হবে না? খণ্ডগুলি কেবলমাত্র উপায় দ্বারা ধারণ করবে। ধন্যবাদ!
mahkie

এই পদ্ধতিটি ছুড়ে ফেলেছে: "java.lang.IllegalStateException: খণ্ডটি ইতিমধ্যে যুক্ত হয়েছে:" আমার অ্যাপ্লিকেশানের জন্য ত্রুটি।
অ্যালিকানবতুর

অনেক ধন্যবাদ. এটা ঠিক কাজ করেছে। আমারও @ শেফগনের মতো একই সমস্যা ছিল।
প্রশান্ত

উপরোক্ত সমাধানগুলি @ যদি এটির জন্য একটি অপ্টিমাইজেশন হিসাবে প্রস্তাব করা হয় তবে তা দয়া করে ie আপনি যদি আগেই জানেন যে পৃষ্ঠাগুলির সংখ্যা * আপনার নিজের পৃষ্ঠাগুলিতে * অলস-লোডিং পদ্ধতিগুলি সমর্থন করতে হবে বা থাকতে হবে, এই সেটিংটি টুইট করে পেজিং অ্যানিমেশন এবং মিথস্ক্রিয়াতে অনুভূত মসৃণতা * এর সুবিধা হতে পারে। আপনার যদি অল্প সংখ্যক পৃষ্ঠাগুলি থাকে (3-4) * যা আপনি একবারে অ্যাক্টিভ রাখতে পারেন তবে ব্যবহারকারীর পৃষ্ঠাগুলি হিসাবে পিছন পিছন * সদ্য নির্মিত ভিউ
সাবট্রির

8

ডিফল্টরূপে, পৃষ্ঠাটি সোয়াইপ করার সময় ভিউপ্যাজার টুকরোগুলি পুনরায় তৈরি করে। এটি প্রতিরোধ করতে, আপনি দুটি জিনিসের একটি চেষ্টা করতে পারেন:

1. আপনার টুকরাগুলির onCreate () এ, সেটট্রেটাইনইনস্ট্যান্স (সত্য) কল করুন।

২. খণ্ডগুলির সংখ্যা যদি স্থির থাকে এবং তুলনামূলকভাবে ছোট হয় তবে আপনার অনক্রিয়েটে () এ নিম্নলিখিত কোডটি যুক্ত করুন:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(3);

আমি যদি সঠিকভাবে মনে রাখি তবে দ্বিতীয় বিকল্পটি আরও আশাব্যঞ্জক। তবে আমি আপনাকে উভয়কে চেষ্টা করে দেখার চেষ্টা করুন এবং এর মধ্যে কোনটি কাজ করে তা দেখার অনুরোধ করছি।


3

"নিষ্ক্রিয় অবস্থায় ভিউ হায়ারার্কিতে বর্তমান পৃষ্ঠার দুপাশে যে পৃষ্ঠাগুলি বজায় রাখতে হবে তার সংখ্যা নির্ধারণ করুন। প্রয়োজনের সময় এই সীমা ছাড়িয়ে থাকা পৃষ্ঠাগুলি অ্যাডাপ্টার থেকে পুনরায় তৈরি করা হবে।"

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

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