ভিউজের পরিবর্তে অ্যান্ড্রয়েডে টুকরো টুকরো ব্যবহার করে কী লাভ?


102

এর জন্য বিকাশ করার সময় Android, আপনি আপনার টার্গেট (বা সর্বনিম্ন) এসডিকে 4 (এপিআই 1.6) এ সেট করতে এবং এর জন্য সমর্থন যুক্ত করতে অ্যান্ড্রয়েড সামঞ্জস্যতা প্যাকেজ (ভি 4) যুক্ত করতে পারেন Fragments। গতকাল আমি এটি করেছি এবং Fragmentsকাস্টম ক্লাসের ডেটা ভিজ্যুয়ালাইজ করতে সফলভাবে প্রয়োগ করেছি implemented

আমার প্রশ্নটি হ'ল: Fragmentsকোনও কাস্টম অবজেক্ট থেকে কেবল ভিউ পাওয়ার বিপরীতে ব্যবহার করা এবং এখনও API 1.5 সমর্থন করার পক্ষে কী লাভ?

উদাহরণস্বরূপ, বলুন আমার কাছে Foo.java ক্লাস রয়েছে:

public class Foo extends Fragment {

    /** Title of the Foo object*/
    private String title;
    /** A description of Foo */
    private String message;

    /** Create a new Foo
     * @param title
     * @param message */
    public Foo(String title, String message) {
        this.title = title;
        this.message = message;
    }//Foo

    /** Retrieves the View to display (supports API 1.5. To use,
     * remove 'extends Fragment' from the class statement, along with
     * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) 
     * @param context Used for retrieving the inflater */
    public View getView(Context context) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.foo, null);
        TextView t = (TextView) v.findViewById(R.id.title);
        t.setText(this.title);
        TextView m = (TextView) v.findViewById(R.id.message);
        m.setText(this.message);
        return v;
    }//getView 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View v = inflater.inflate(R.layout.foo, null);
        TextView t = (TextView) v.findViewById(R.id.title);
        t.setText(this.title);
        TextView m = (TextView) v.findViewById(R.id.message);
        m.setText(this.message);
        return v;
    }//onCreateView

}//Foo

উভয় পদ্ধতিই এমন একটি ক্রিয়াকলাপ তৈরি করতে এবং তার সাথে কাজ করার জন্য খুব সহজ, যা বলে, List<Foo>প্রদর্শনের একটি রয়েছে (উদাহরণস্বরূপ, প্রোগ্রামে প্রতিটিকে একটিতে যুক্ত করা হয় ScrollView), তবে এটি Fragmentsসত্যই সমস্ত দরকারী, বা এগুলি কেবল মাত্র একটি অতি-প্রশংসিত সরলকরণ উপরের কোডের মাধ্যমে যেমন একটি ভিউ পাচ্ছেন?


2
খণ্ডগুলির কোনও ইউআই থাকতে হবে না, তারা কেবল পুনরায় ব্যবহারযোগ্য আচরণ হতে পারে। এক দৃষ্টিভঙ্গি সেই ক্ষেত্রে অপ্রয়োজনীয় হবে।
ফিলিপ রেচার্ট

আমি অন্য প্রশ্নের উত্তর দিয়েছি। দেখুন stackoverflow.com/a/14912608/909956 টি; ড - কখনও কখনও টুকরা কাস্টম দৃশ্য বাস্তবায়ন উপর ভরসা করার চেয়ে আরও পুনর্ব্যবহারযোগ্য উপাদান তৈরি করার অনুমতি দেয়। কেন লিঙ্কটি দেখুন।
নুমান সালাতে

উত্তর:


172

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

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

আমি উত্তর দেওয়ার পরে বুঝতে পারি যে আমি এক বছর আগে একই ধরণের প্রশ্নটিতে পোস্ট করেছি: https://stackoverflow.com/a/11126397/618881


14
খুব ভাল উত্তর। আমি কেবল যুক্ত করতে চেয়েছিলাম যে টুকরোগুলি 4.2 বা লাইব্রেরি রেভ 11 এর জন্য
বাসা বাঁধতে পারে

2
আপডেটের জন্য @ কার্লো ধন্যবাদ। আমি এটি ধারণামূলকভাবে সম্ভব বলে মনে করি নি, তবে তারা চিটফ্র্যাগমেন্টম্যানেজার () এর মাধ্যমে বেসরকারী ফ্রেগমেন্টম্যানেজার ব্যবহার করে এটি ঘিরে কাজ করেছিল। ওহ, এবং এটি 11 নয়, এপিআই 17 এবং সমর্থন লাইব্রেরির মাধ্যমে উপলব্ধ।
হেনরি

2
আমি কেবল এই প্রশ্নটি আবার দেখছিলাম, এবং আমার অভিজ্ঞতাও বদলেছে। এটি এমন একটি উত্তর যা বেনিফিট এবং ত্রুটি উভয়ই সম্পর্কে ভাল ধারণা উপলব্ধ করে এবং এটি খুব সহায়ক। ধন্যবাদ!
ফিল

2
এই উত্তরটি +1 করতে চান তবে এটি করা বর্তমান স্কোরকে নষ্ট করবে। এছাড়াও, 70 টি আমার প্রিয় নম্বর নয় number
বেহনম

1
গত বছরের জন্য, আমি আরও ভেবেছিলাম যে খণ্ডগুলি কোনও অতিরিক্ত সাধারণ বৈশিষ্ট্য সরবরাহ করে না, তবে আমি অভিজ্ঞতা অর্জন করেছি যে ক্রিয়াকলাপে ফিরে ক্লিক করার পরে আমি এতে ডাউনলোড করা সমস্ত চিত্র হারিয়েছি, তাই ক্যাশে বাস্তবায়ন যুক্ত করতে হয়েছিল, এখন আমি ব্যবহার করে ভাবছি টুকরোগুলি এটি খুব সহজ হতে পারে
শিরীশ হারওয়াড

27

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

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

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


ধন্যবাদ, এটি অবশ্যই সহায়ক ছিল। আমি মনে করি আমি দৃশ্যের সাথে লেগে থাকব এবং সেগুলি পুনরায় ব্যবহারযোগ্য করে তুলতে আমার নিজের 'ব্যাক স্ট্যাক' তৈরি করব।
ফিল

3

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

এখানে আপনি আরও পড়তে পারেন।


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

3
  1. পরিস্থিতি ক্রিয়াকলাপের স্প্লিট স্ক্রিন - আমাদের একটি লেআউট এবং একটি ক্রিয়াকলাপ রয়েছে যা বাম ডান স্ক্রিন অংশটি পরিচালনা করে
  2. সিনারিও টুকরো ক্রিয়াকলাপ মূল পর্দার জন্য আমাদের একটি লেআউট রয়েছে, ডানদিকের জন্য একটি বাম দিকের জন্য

আপনার যদি সহজ প্রয়োগ হয় তবে পরিস্থিতি একটাই ভাল।

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

আমার বিভক্ত স্ক্রিন ফ্রেগমেন্টেটিভিটি রয়েছে আমি এটিকে 'ইনটেন্ট এক্সট্রা' দিয়ে কল করতে পারি এবং ফ্রেগমেন্টটিভিটিতে বলতে পারি কোনটি খণ্ড লোড করা উচিত। টুকরোগুলি ভাল কারণ সেগুলি প্রকাশ্যে নেই তাই আপনি পুনরায় ব্যবহারযোগ্য টুকরো এবং টুকরো টুকরো তৈরি করতে পারেন।

তবে এটি আপনার প্রকল্পকে আরও বড় করে তোলে। তবে আপনি যদি বড় প্রকল্প করেন তবে আপনি অনেকগুলি সঞ্চয় করতে পারেন। কারণ আপনি একই খণ্ড বা একই টুকরা ক্রিয়াকলাপ ব্যবহার করতে পারেন।

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

এটি দরকারী তবে আমি এখনই জানি না। তবে আমার কিছু ধারণা আছে।

এটি সর্বদা সমস্যা। অ্যান্ড্রয়েড দল কিছুটা সংযোগ তৈরি করেছে এবং কোনটি ভাল তা কেউ জানে না। কারণ আমরা খুব কমই শিখি যেমন এটি ছিল এবং এখানে কিছু নতুন জিনিস আসে।

আমার মতে এটি ভাল তবে গুগল আমাদের বলার কারণে নয়।


0

কাস্টমভিউয়ের উপর টুকরা বা ক্রিয়াকলাপ ব্যবহার করার সময় একটি কেস যুক্ত করুন:

আপনি যখন নির্দিষ্ট মতামত, লিস্টভিউ বা টেক্সটভিউ পর্যবেক্ষণ করার জন্য কার্সরলডার ব্যবহার করছেন এবং যখনই আপনার কন্টেন্টপ্রাইডারের ডেটা পিছনের দিকে আপডেট হবে তখন (আপনার কাছে এমন একটি সাধারণ পরিস্থিতি রয়েছে যা আপনার স্থানীয় ডেটাবেস আপডেট করে যা দূরবর্তী ডাটাবেস / ক্লাউড থেকে পর্যায়ক্রমে পোলিং ডেটা দ্বারা আপডেট করে )


-2

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

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