android - مترجم - fragments معنى




معضلة: متى تستخدم الأجزاء مقابل الأنشطة: (10)

أستخدم الأجزاء للحصول على تجربة مستخدم أفضل. على سبيل المثال ، إذا كان لديك زر وتريد تشغيله لنفترض أنه خدمة ويب عند النقر عليه ، فأنا أرفق جزءًا بالنشاط الرئيسي.

if (id == R.id.forecast) {

    ForecastFragment forecastFragment = new ForecastFragment();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.main_content, forecastFragment);
    ft.addToBackStack("backstack");
    forecastFragment.setArguments(b);
    ft.commit();
}

بهذه الطريقة لن يحتاج المستخدم إلى التحرك في نشاط آخر.

وثانيا ، أنا أفضل القطع لأنك تستطيع التعامل معها بسهولة أثناء الدوران.

أعلم أن Activities مصممة لتمثل شاشة واحدة من طلبي ، في حين تم تصميم Fragments بحيث تكون تخطيطات واجهة المستخدم القابلة لإعادة الاستخدام مع منطق مضمن داخلها.

حتى وقت ليس ببعيد ، قمت بتطوير تطبيق كما قال أنه يجب تطويرها. لقد أنشأت نشاطًا لتمثيل شاشة تطبيقي واستخدام أجزاء من ViewPager أو Google Maps . نادراً ما قمت بإنشاء ListFragment أو واجهة مستخدم أخرى يمكن إعادة استخدامها عدة مرات.

في الآونة الأخيرة تعثرت على مشروع يحتوي على MainActivity فقط ، أحدهما هو SettingsActivity والآخر هو MainActivity . يتم ملء مخطط MainActivity بالعديد من أجزاء واجهة المستخدم المخفية بملء الشاشة وتظهر واحدة فقط. في منطق Acitivty هناك العديد من FragmentTransitions بين شاشات مختلفة من التطبيق.

ما أعجبني في هذا النهج هو أنه نظرًا لأن التطبيق يستخدم تطبيق ActionBar ، فإنه يظل سليمًا ولا يتحرك مع تبديل شاشة الرسوم المتحركة ، وهو ما يحدث مع تبديل Activity . هذا يعطي شعورا أكثر طلاقة لتلك التحولات الشاشة.

لذا أعتقد أن ما أطلبه هو مشاركة طريقة التطوير الحالية الخاصة بك فيما يتعلق بهذا الموضوع ، أعلم أنه قد يبدو وكأنه سؤال قائم على الرأي في أول نظرة ولكني أنظر إليه باعتباره سؤال تصميم وهندسة معمارية لنظام Android ... ليس حقاً الرأي القائم واحد.

تحديث (01.05.2014): بعد هذا العرض الذي قدمه إيريك بورك من سكوير ، (الذي يجب أن أقوله هو عرض تقديمي رائع يحتوي على الكثير من الأدوات المفيدة لمطوري برامج Android. ولا أتعامل مع أي شكل من الأشكال في المربع)

http://www.infoq.com/presentations/Android-Design/

من تجربتي الشخصية خلال الأشهر القليلة الماضية ، وجدت أن أفضل طريقة لإنشاء تطبيقاتي هي إنشاء مجموعات من الأجزاء التي تمثل تدفقًا في التطبيق وتقديم كل تلك الأجزاء في Activity واحد. لذلك سيكون لديك في الأساس نفس عدد Activities في تطبيقك كعدد التدفقات. وبهذه الطريقة يبقى شريط الإجراءات سليمًا على جميع شاشات التدفق ، ولكن يتم إعادة إنشائه على تغيير التدفق مما يجعل الأمر منطقيًا. وكما يقول إيريك بورك ، وكما أدركت أيضًا ، فإن فلسفة استخدام أقل عدد ممكن من Activities لا تنطبق على جميع المواقف لأنها تخلق فوضى فيما يسميه "الله".


أعتقد أن استخدام الشظايا أفضل من استخدام الأنشطة ، ولكن من الصعب إدارة زر الكيس الخلفي باستخدام frament


إن الميزة الكبيرة الوحيدة في fragment النشاط هو أنه يمكن استخدام الشفرة المستخدمة للقطعة لأنشطة مختلفة. لذلك ، فإنها توفر إمكانية إعادة استخدام الكود في تطوير التطبيقات.


استخدام نشاط واحد لكل تطبيق لتوفير قاعدة fragment استخدام fragment للشاشة ، fragments خفيفة الوزن مقارنة بشظايا الشظايا هي شظايا قابلة لإعادة الاستخدام أكثر ملاءمة للتطبيق الذي يدعم كل من الهاتف والكمبيوتر اللوحي


سيخبرك الخبراء: "عندما أرى واجهة المستخدم ، سأعرف ما إذا كنت سأستخدم نشاطًا أو جزءًا". في البداية لن يكون لهذا الأمر أي معنى ، ولكن في الوقت المناسب ، ستتمكن بالفعل من معرفة ما إذا كنت بحاجة إلى Fragment أم لا.

هناك ممارسة جيدة وجدت مفيدة للغاية بالنسبة لي. حدث لي بينما كنت أحاول أن أشرح شيئا لابنتي.

بمعنى ، تخيل مربعًا يمثل شاشة. يمكنك تحميل شاشة أخرى في هذا المربع؟ إذا كنت تستخدم مربعًا جديدًا ، فهل سيكون عليك نسخ عناصر متعددة من المربع الأول؟ إذا كانت الإجابة هي نعم ، فيجب عليك استخدام Fragments ، لأن Activity الجذر يمكن أن يحتفظ بكافة العناصر المكررة لتوفير الوقت لك في إنشائها ، ويمكنك ببساطة استبدال أجزاء من الصندوق.

ولكن لا تنس أنك تحتاج دائمًا إلى حاوية صندوق ( Activity ) أو سيتم تفريق الأجزاء الخاصة بك. مربع واحد مع أجزاء في الداخل.

احرص على عدم إساءة استخدام المربع. ينصح خبراء Android UX (يمكنك العثور عليها على YouTube) عندما يتعين علينا تحميل Activity آخر بشكل صريح ، بدلاً من استخدام Fragment (مثل عندما نتعامل مع درج التنقل الذي يحتوي على فئات). عندما تشعر بالراحة مع Fragments ، يمكنك مشاهدة جميع مقاطع الفيديو الخاصة به. بل أكثر من ذلك هي مواد إلزامية.

هل يمكنك الآن الاطلاع على واجهة المستخدم وتحديد ما إذا كنت بحاجة إلى Activity أو Fragment ؟ هل حصلت على منظور جديد؟ أعتقد أنك فعلت


شيء فعلته: استخدام جزء أقل عندما يكون ذلك ممكنا. لسوء الحظ ، فمن الممكن في حالة تقريبا. لذا ، انتهى بي المطاف بالكثير من الشظايا وقليل من الأنشطة. بعض العيوب التي أدركتها:

  • ActionBar & Menu: عندما يحتوي الجزء الثاني على عنوان مختلف ، أي القائمة
    سوف يصعب التعامل معها. مثال: عند إضافة جزء جديد ، يمكنك تغيير عنوان شريط الإجراءات ، ولكن عندما يتم عرضه من backstack لا توجد طريقة لاستعادة العنوان القديم. قد تحتاج إلى شريط أدوات في كل جزء لهذه الحالة ، ولكن دعني تصدقني ، فذلك سيقضي وقتًا أطول.
  • عندما نحتاج إلى startForResult ، فإن النشاط لا يحتوي إلا على جزء.
  • ليس لديك حركة انتقالية بشكل افتراضي

الحل الخاص بي لهذا هو استخدام نشاط لتغليف جزء من الداخل. لذلك لدينا شريط إجراءات منفصل ، قائمة ، startActivityForResult ، رسوم متحركة ، ...


في رأيي أنه ليس حقا ذات الصلة. العامل الرئيسي للنظر هو

  1. كم مرة ستقوم بإعادة استخدام أجزاء من واجهة المستخدم (القوائم على سبيل المثال) ،
  2. هل التطبيق أيضًا للأجهزة اللوحية؟

يتمثل الاستخدام الرئيسي للأجزاء في إنشاء أنشطة متعددة اللاعبين ، مما يجعلها مثالية للتطبيقات التي تستجيب للكمبيوتر اللوحي / الهاتف.


لا تنس أن النشاط هو كتلة / مكون التطبيق الذي يمكن مشاركته وبدءه من خلال Intent! لذلك يجب على كل نشاط في تطبيقك حل نوع واحد فقط من المهام. إذا كان لديك مهمة واحدة فقط في تطبيقك ، فأعتقد أنك تحتاج إلى نشاط واحد فقط والعديد من الأجزاء إذا لزم الأمر. بالطبع يمكنك إعادة استخدام الأجزاء في الأنشطة المستقبلية التي تحل مهام أخرى. هذا النهج سيكون واضح ومنطقي لفصل المهام. وأنت لا تحتاج إلى الحفاظ على نشاط واحد مع معلمات تصفية مختلفة الغرض لمجموعات مختلفة من الأجزاء. أنت تحدد المهام في مرحلة التصميم من عملية التطوير على أساس المتطلبات.


هناك ما هو أكثر مما تدرك ، يجب عليك أن تتذكر أن النشاط الذي يتم إطلاقه لا يدمر نشاط الاتصال بشكل ضمني. بالتأكيد ، يمكنك إعداده بحيث يقوم المستخدم بالنقر فوق زر للانتقال إلى إحدى الصفحات ، ثم بدء نشاط تلك الصفحة وتدمير النشاط الحالي. هذا يسبب الكثير من النفقات العامة. أفضل دليل يمكنني تقديمه لك هو:

** ابدأ نشاطًا جديدًا فقط إذا كان من المنطقي أن يكون النشاط الرئيسي ويفتح هذا النشاط في الوقت نفسه (فكر في عدة نوافذ).

من الأمثلة الرائعة على الوقت الذي يكون فيه من المنطقي وجود أنشطة متعددة هو Google Drive. النشاط الرئيسي يوفر مستكشف الملفات. عند فتح ملف ، يتم تشغيل نشاط جديد لعرض هذا الملف. يمكنك الضغط على زر التطبيقات الحديثة التي ستسمح لك بالعودة إلى المتصفح دون إغلاق الوثيقة المفتوحة ، ثم ربما فتح مستند آخر بالتوازي مع الأول.


يعتمد ذلك على ما تريد أن تبنيه حقًا. على سبيل المثال ، يستخدم navigation drawer الأجزاء. تستخدم علامات التبويب fragments أيضًا. تطبيق جيد آخر ، حيث يوجد لديك listview . عند تدوير الهاتف والنقر فوق أحد الصفوف ، يتم عرض النشاط في النصف المتبقي من الشاشة. أنا شخصياً أستخدم fragments ومجموعات fragment dialogs ، لأنها أكثر احترافية. بالإضافة إلى ذلك يتم التعامل معها بسهولة أكبر في الدوران.







architecture