পছন্দসই প্যাকেজটি উদ্দেশ্যমূলকভাবে বাদ দেওয়া হয়েছিল?


153

আমি পছন্দগুলি লিখতে চাই যা 3.0 এবং প্রাক-3.0 উভয় ডিভাইসে প্রয়োগ করা যেতে পারে। আবিষ্কার করছিPreferenceActivityঅবনমিত পদ্ধতি রয়েছে তা করে (যদিও এগুলি সহিত নমুনা কোডে ব্যবহৃত হয়), আমি PreferenceFragementআমার সমস্যার সমাধান করার জন্য সামঞ্জস্যতা প্যাকেজটি দেখেছি ।

এটি প্রদর্শিত হয়, যদিও PreferenceFragment এটি সামঞ্জস্যতা প্যাকেজে নেইকেউ আমাকে বলতে পারেন এটি উদ্দেশ্যমূলক ছিল কিনা? যদি তা হয়, তবে আমি কী সহজেই ডিভাইসের ব্যাপ্তিগুলি (যেমন <3.0 এবং> = 3.0) লক্ষ্যবস্তু করতে পারি বা আমাকে হুপ দিয়ে যেতে হবে? যদি এটি ইচ্ছাকৃতভাবে বাদ না দেওয়া হয়, তবে আমরা কী সামঞ্জস্যতা প্যাকেজের নতুন প্রকাশ আশা করতে পারি? বা ব্যবহারের জন্য নিরাপদ অন্য কোন কাজ আছে?

চিয়ার্স

জেমস


1
এই সমস্যা সমাধানের জন্য আমার পন্থা stackoverflow.com/questions/14076073/...
ecv

কেউ তৃতীয় পক্ষ তৈরি করেছে PreferenceFragmentযা আপনি ভুলে যাবেন তা এমনকি রয়েছে। আমার উত্তর দেখুন ।
theblang

ক্রিস ব্যানস তার ব্লগে একটি মন্তব্যে এটি সম্বোধন করেছেন । তিনি বলেছিলেন যে কারণটি হচ্ছে,"Because most of Preferences' implementation is hidden, therefore impossible to backport without lots of hackery."

আমার আপডেট হওয়া উত্তরটি দেখুনPreferenceFragmentCompatসমর্থন লাইব্রেরিতে সম্প্রতি যুক্ত করা হয়েছিল।
theblang

উত্তর:


90

অগ্রাধিকারের ক্রিয়াকলাপে অবনতিযুক্ত পদ্ধতি রয়েছে তা আবিষ্কার করে (যদিও এটি সহিত নমুনা কোডে ব্যবহৃত হয়)

অজস্র পদ্ধতিগুলি অ্যান্ড্রয়েড 3.0.০ হিসাবে হ্রাস করা হয়েছে। এন্ড্রয়েডের সমস্ত সংস্করণগুলিতে এগুলি পুরোপুরি ঠিক আছে, তবে দিকনির্দেশটি PreferenceFragmentঅ্যান্ড্রয়েড 3.0.০ এবং উচ্চতরতে ব্যবহার করা উচিত।

কেউ আমাকে বলতে পারেন এটি উদ্দেশ্যমূলক ছিল কিনা?

আমার ধারণা এটি ইঞ্জিনিয়ারিং সময়ের প্রশ্ন, তবে এটি কেবল অনুমান।

যদি তা হয়, তবে আমি কী সহজেই ডিভাইসের ব্যাপ্তিগুলি (যেমন <3.0 এবং> = 3.0) লক্ষ্যবস্তু করতে পারি বা আমাকে হুপ দিয়ে যেতে হবে?

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

যদি এটি ইচ্ছাকৃতভাবে বাদ না দেওয়া হয়, তবে আমরা কী সামঞ্জস্যতা প্যাকেজের নতুন প্রকাশ আশা করতে পারি?

আমাদের বাকিরা কখন এটি সন্ধান করবে, কোনটি যদি বলা হয়, কখন এবং কখন এটি জাহাজে আসে You

বা ব্যবহারের জন্য নিরাপদ অন্য কোন কাজ আছে?

উপরে দেখুন.


চিয়ার্স মার্ক আমি দেখেছি যে আপনি কয়েকটি জায়গায় (অ্যান্ড্রয়েড গুগল গ্রুপ এবং আপনার ব্লগ) এ সম্পর্কে মন্তব্য করেছেন তবে একটি সুনির্দিষ্ট উত্তর চেয়েছিলেন (যতদূর পর্যন্ত কেউ পরিস্থিতি পেতে পারে)।
জেমস

@ জেমস: হ্যাঁ, ঘষাঘটিত পছন্দসই এক্সএমএল সংজ্ঞায় থাকবে, এমন কিছু পাওয়া যা টুকরো টুকরো টুকরো পাশাপাশি কাজ করবে এবং একসাথে মনস্থ করা হবে, কারণ আমি নিশ্চিত না যে <include>পছন্দ এক্সএমএল নিয়ে কাজ করে। বিটিডাব্লু, আপনি যদি গ্রাহক হন তবে এই প্রকল্পটির উল্লেখ করে বই আপডেটটি কয়েক মিনিট আগে ঘোষণা করা হয়েছিল।
কমন্সওয়্যার

7
আমি দুঃখিত তবে আপনি এখানে কী পয়েন্টটি বানাতে চাইছেন তা আমি সত্যি জানি না। আপনি কিছুতেই কোনও উত্তর দিবেন না, কেবল মন্তব্য / অনুমান / অপ্রাসঙ্গিক বহিরাগত লিঙ্কগুলিকে উল্লেখ করুন যা সমস্যার সাথে কিছু করার নেই। প্রশ্নটি হ'ল বাছাই ইচ্ছাকৃত ছিল কিনা , পছন্দসই অংশটির সামঞ্জস্যতা সংস্করণ ব্যতীত আপনার বর্ণিত পদ্ধতিতে পছন্দক্রম বাড়ানোর কোনও উপায় নেই কারণ যদি অগ্রাধিকারের উপস্থিতি না থাকে তবে না হয় সমর্থনফরাগমেন্ট ম্যানেজার () বা অন্য কোনও পদ্ধতিতে পান প্রথম স্থানে টুকরোগুলি ব্যবহার করার প্রয়োজন।
জাস্টিন বুজার

8
@ জাস্টিনবুজার: "প্রশ্নটি বাদ দেওয়া ইচ্ছাকৃত ছিল কিনা" - গুগলের পক্ষে এই কাজটির একমাত্র লোক উত্তর দিতে পারে। গুগলে চাকরি পাওয়ার জন্য আপনাকে স্বাগতম জানার চেষ্টা করুন। "আপনি যেভাবে বর্ণনা করেছেন তেমন পছন্দকে বাড়ানোর কোনও উপায় নেই" - আমি যে কোডটি লিঙ্ক করেছি তা ডাউনলোড করতে আপনাকে স্বাগতম।
কমন্সওয়্যার

9
@ জাস্টিনবুজার রেকর্ডের জন্য, মার্ক আমার প্রশ্নের উত্তর দিয়েছেন। তার উত্তর গ্রহণ করা আমার থেকে স্পষ্ট।
জেমস

21

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

সম্পাদনা করুন: চেষ্টা এবং এ কোড দেখার পরও কি http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/preference/PreferenceFragment.java? Av = জ - আমার নিজের পছন্দসইটি তৈরি করা হবে না। এটি প্রদর্শিত হয় প্যাকেজ-প্রাইভেটের উদার ব্যবহারটি 'সুরক্ষিত'-এর পরিবর্তে পছন্দসই ম্যানেজারে প্রধান ব্লকার। এটি করার মতো কোনও সুরক্ষা বা সত্যিই ভাল অনুপ্রেরণার মতো দেখে মনে হচ্ছে না এবং এটি ইউনিট-পরীক্ষার পক্ষে দুর্দান্ত নয় তবে ওহ ভাল ... কম টাইপিং আমার ধারণা ...

সম্পাদনা ভি 2: আসলে এটি ঘটেছিল এবং এটি কার্যকর হয়েছিল। সামঞ্জস্যতা এপিআই জেআর দিয়ে কোডটি কাজ করা অবশ্যই মাথা ব্যথা ছিল। আমাকে এসডিকে থেকে আমার অ্যাপ্লিকেশনটিতে প্রায় 70% com.android.preferences প্যাকেজটি অনুলিপি করতে হয়েছিল এবং তারপরে অ্যান্ড্রয়েডে সাধারণত মাঝারি মানের মানের জাভা কোডটি নিয়ে কুস্তি করতে হয়েছিল। আমি এসডিকে ভি 14 ব্যবহার করেছি। একজন গুগ ইঞ্জিনিয়ারের পক্ষে আমি যা করেছি তা করা খুব সহজ হত, আমি কিছু শীর্ষস্থানীয় অ্যান্ড্রয়েড ইঞ্জিনিয়ারদের এই বিষয় সম্পর্কে যা বলতে শুনেছি তার বিপরীতে।

বিটিডাব্লু - আমি কি বলেছিলাম "ডিভাইসগুলিকে টার্গেট করা কোনও সমস্যা নয়"? এটি সম্পূর্ণরূপে ... আপনি যদি com.android.preferences ব্যবহার করেন তবে আপনি বড় রিফ্যাক্টরিং ছাড়া সামঞ্জস্যতা API এর সাথে স্যুপ আউট করতে সক্ষম হবেন না। মজা লগ!


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

4
আপনি কীভাবে এটি ভাগ করে নিতে চান? আমি ঠিক একই সমস্যার মধ্যে চলেছি, কেবলমাত্র আমার পছন্দসইটিভিটি লোডার ব্যবহার করতে হবে এবং তাই আমাকে অবশ্যই সামঞ্জস্যের লাইব্রেরিটি ব্যবহার করতে হবে
করাকুরি

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

@ রিচার্ডলিমেসুরিয়ার তবে কমার্সওয়্যারের পদ্ধতি যথাযথ নয় যদি আপনার ড্রয়ারলাউট
নিউরাল্ড

16

কমন্সওয়ারের উত্তরের পাশাপাশি দৃac়চিত্ত পর্যবেক্ষণকে কেন্দ্র করে আমি একক বংশধর শ্রেণীর সমাধান নিয়ে এসেছি যার মাধ্যমে সর্বনিম্ন অ্যানড্রয়েড এপিআই সংস্করণকে ন্যূনতম গোলযোগ এবং কোনও কোড বা সংস্থানীয় সদৃশ দ্বারা চিহ্নিত করতে সক্ষম। দয়া করে এখানে সম্পর্কিত প্রশ্নের আমার উত্তরটি দেখুন: পছন্দেরঅ্যাক্টিভিটি অ্যান্ড্রয়েড 4.0.০ এবং তার আগেরটি

বা আমার ব্লগে: http://www.blackmoonit.com/2012/07/all_api_prefsactivity/

Tablets.০.৩ এবং ৪.০.৪ চলমান দুটি ট্যাবলেট এবং সেই সাথে একটি ফোন 4.0.০.৪ এবং ২.৩.৩ চলছে এবং ১.6 চলমান একটি এমুলেটর পরীক্ষা করেছে।


10

মেশিনারিয়াস থেকে পছন্দের ফ্রেম-কম্প্যাট দেখুন । গ্রেডের সাথে পড়া খুব সহজ ছিল এবং আমি ভুলে গেছি যে এটি এমনকি আছে।

compile 'com.github.machinarius:preferencefragment:0.1.1'

গুরুত্বপূর্ণ আপডেট করুন: সর্বশেষ সংস্করণ এর v7 support libraryএখন একটি নেটিভ হয়েছে PreferenceFragmentCompat


10

আগস্ট ২০১৫ এ গুগল নতুন পছন্দ সমর্থন লাইব্রেরি v7 প্রকাশ করেছে

এখন আপনি যেকোন বা এর সাথে পছন্দসই ফ্রেমমেন্ট কমপ্যাট ব্যবহার করতে পারেনActivityAppCompatActivity

public static class PrefsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

preferenceThemeআপনার থিমটি সেট করতে হবে :

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
  ...
  <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

এইভাবে আপনি preferenceThemeআপনার ক্রিয়াকলাপের অন্যান্য অংশগুলিকে প্রভাবিত না করে প্রতিটি পছন্দ টাইপের জন্য ব্যবহৃত লেআউটগুলিকে স্টাইল করতে পছন্দসই করতে পারেন ।


1
আমি মনে করি আপনি কোনও ফাংশন মিস করেছেন: onCreatePreferences
অ্যান্ড্রয়েড বিকাশকারী

এই আমার দিন বাঁচা! আমি ভাবছি অ্যান্ড্রয়েড স্টুডিওর প্রকল্প কাঠামোতে কেন এটি দৃশ্যমান নয় ... ?? বিটিডাব্লু আপনার কোডটিতে টাইপো আছে। হওয়া উচিত "প্রসারিতফ্রেগমেন্টকম্প্যাট বাড়ানো"
গ্রেজগোর্জ ডি।

7

দৃac়রূপের উত্তর সঠিক, তবে এখানে আরও কিছু বিবরণ দেওয়া হল।

আপনি "একটি সাধারণ বিন্যাস তৈরি করতে পারবেন না এবং দৃশ্যের উপাদানগুলিকে ম্যানুয়ালি অংশীদারিদের সাথে আবদ্ধ করতে পারবেন না" এর কারণটি হ'ল android.preferences এপিআইতে কিছু আশ্চর্যজনক বাদ পড়েছে। পছন্দঅ্যাক্টিভিটি এবং পছন্দসংশ্লিষ্ট উভয়েরই সমালোচনাবিহীন অ-সর্বজনীন পছন্দব্যবস্থাপনা পদ্ধতিতে অ্যাক্সেস রয়েছে, এগুলি ছাড়া আপনি নিজের নিজস্ব পছন্দ UI প্রয়োগ করতে পারবেন না।

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

এবং আপনার প্রয়োগটি স্নেহপূর্বক android.preferences প্যাকেজে রেখে আপনার কাজ করতে পারবেন না, কারণ অ্যান্ড্রয়েড এপিআইতে অ-সর্বজনীন পদ্ধতিগুলি এসডিকে থেকে বাদ দেওয়া হয়েছে। প্রতিচ্ছবি এবং গতিশীল প্রক্সি জড়িত কিছুটা সৃজনশীলতার সাথে, আপনি এখনও সেগুলি পেতে পারেন। টেনিয়াসিয়াসের বক্তব্য অনুসারে একমাত্র বিকল্প হ'ল কমপক্ষে ১৫ টি ক্লাস, ৫ টি লেআউট এবং অনুরূপ সংখ্যক স্টাইল.এক্সএমএল এবং অ্যাটার্স.এক্সএমএল উপাদান সহ পুরো অ্যান্ড্রয়েড.প্রিফেরেন্স প্যাকেজটি কাঁটাচামচ করা।

সুতরাং আসল প্রশ্নের উত্তর দেওয়ার জন্য, গুগল যেভাবে সামঞ্জস্য প্যাকেজে পছন্দসই ফ্রেমটিকে অন্তর্ভুক্ত না করেছিল তা হ'ল তারা এবং আমার নিজের মতোই অসুবিধা হত। এমনকি গুগলও সময় মতো ফিরে যেতে পারে না এবং পুরানো প্ল্যাটফর্মগুলিতে এই পদ্ধতিগুলি সর্বজনীন করতে পারে না (যদিও আমি আশা করি তারা ভবিষ্যতে প্রকাশে এটি করে)


2

আমার অ্যাপ্লিকেশন লক্ষ্যটি এপিআই +১৪ তবে কিছু অভিনব নেভিগেশনের জন্য সমর্থন লাইব্রেরি ব্যবহারের কারণে, আমি এটি ব্যবহার করতে পারি নি android.app.Fragmentএবং ব্যবহার করতে হয়েছিল android.support.v4.app.Fragment, তবে আমারও এটি থাকা দরকারPreferenceFragment পিছনে কোডে বড় পরিবর্তন না করে জায়গাটিতে থাকা দরকার।

সুতরাং সমর্থন লাইব্রেরি উভয় বিশ্বের জন্য আমার সহজ ফিক্স এবং PreferenceFragment:

private android.support.v4.app.Fragment fragment;
private android.app.Fragment nativeFragment = null;

private void selectItem(int position) {
    fragment = null;
    boolean useNativeFragment = false;
    switch (position) {
    case 0:
        fragment = new SampleSupprtFragment1();
        break;
    case 1:
        fragment = new SampleSupprtFragment2();
        break;
    case 2:
        nativeFragment = new SettingsFragment();
        useNativeFragment = true;
        break;
    }
    if (useNativeFragment) {
        android.app.FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
            .replace(R.id.content_frame, nativeFragment).commit();
    } else {
        if (nativeFragment != null) {
            getFragmentManager().beginTransaction().remove(nativeFragment)
                .commit();
            nativeFragment = null;
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
            .replace(R.id.content_frame, fragment).commit();
    }
}

2

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

কিছু অনুসন্ধানের পরে আমি অ্যান্ড্রয়েড-সমর্থন-ভি 4-পছন্দনীয় ফ্রেম লাইব পেয়েছি । দৃac়চিত্ত যেমন বলেছিলেন তেমনি মূল পছন্দসমূহ ফ্রেমটিকে অনুলিপি করতে এবং পুনরায় সজ্জিত করার জন্য এই লিবি অনেক সময় বাঁচায়। দুর্দান্ত কাজ করে এবং ব্যবহারকারীরা পছন্দ পছন্দ করে।

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