সতর্কতা ial


126

আমি তিসি সতর্কবার্তা পেতে, Avoid passing null as the view rootযখন সঙ্গে মতামত বৃদ্ধি nullহিসাবে parent, মত:

LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);

যাইহোক, ভিউটি কোনওটির বিষয়বস্তু হিসাবে ব্যবহার করতে হবে AlertDialog, এটি ব্যবহার setViewকরে AlertDialog.Builder, সুতরাং কী হিসাবে পাস করা উচিত তা আমি জানি না parent

এক্ষেত্রে আপনার কী হওয়া parentউচিত বলে আপনি মনে করেন ?


2
নাল পরিবর্তে মিথ্যা পাস। দেখতে এই
MrDumb

নাল পরিবর্তে আপনাকে প্যারেন্ট লেআউট দেওয়ার চেষ্টা করুন এবং তারপরে সেটভিউ ব্যবহার করবেন না।
হরেশ ছেলানা

আমি পদ্ধতির জন্য লিন্ট সতর্কতা দমন করি। কেন পাস না করা উচিত তার কোনও ভাল কারণ আমি এখনও দেখিনি null
323go

4
আমি প্যারেন্ট ভিউয়ের উপর নির্ভর করে লেআউট ইস্যুটি বুঝতে পারি, তবে এটি একটি অ্যালার্টডায়ালগের জন্য সত্যিই প্রযোজ্য না যা মূলত ক্রিয়াকলাপের দর্শন শ্রেণিবদ্ধের উপরে ভাসমান। এই জন্য আপনি পাস করতে পারেন null। এমন একটি কারণ রয়েছে যে আপনি লিন্টটি দমন করতে পারেন। লিন্ট আপনাকে প্রায়শই মিস করা সমস্যাগুলির জন্য সতর্কতা দেওয়ার কথা বলে; এই ক্ষেত্রে, এটি সঠিক প্রার্থনা।
323go

1
@ আশুটিওয়ারি ৪ আমি প্রতিদিন নতুন নতুন জিনিস শিখছি .. সুন্দর বিশ্ব: আমি
রাহুল

উত্তর:


174

কোনও সতর্কতা ছাড়াই ডায়ালগ ভিউতে স্ফীত করতে এই কোডটি ব্যবহার করুন:

View.inflate(context, R.layout.dialog_edit, null);

7
@ মারিয়ানপাডজিওচ কারণ এটি কোনও সতর্কতার কারণ নয়। :-) অবশ্যই, এটি লিন্ট কোডটি কেন আচরণ করে View.inflateএবং LayoutInflator.inflateআলাদাভাবে এই প্রশ্নটি তোলে । আমি একটি নির্দিষ্ট উত্তর দেখতে পাইনি। একই দৃষ্টিভঙ্গি বাড়ানোর জন্য দুটি সমতুল্য সমতুল্য উপায় কেন এটি সম্পর্কিত হতে পারে, যার জন্য আমি যুক্তিও দেখিনি।
এডওয়ার্ড ব্রে

12
এটা ভুল. এটি কেবল সতর্কতা দমন করে তবে সমস্যাটি এখনও রয়েছে। আরও ভাল সমাধানের জন্য সম্ভবমোবাইল.কম / ২০১৩ / ২০১5 / আউটআউট- ইনফ্লেশন- পড়ুন ।
জ্যাকসাহ্নওয়াল্ড্ট মনিকা

16
@ জোনাক্রিস্টোফারসাহনওয়াল্ট আপনি কী বর্ণনা করতে পারবেন? নিবন্ধটি বলেছে যে সতর্কতা ডায়ালগের একটি নাল পিতা হওয়া উচিত কারণ এটির মূল দৃষ্টিভঙ্গি নেই। আমার কাছে মনে হয় যে এই সতর্কতাটি একটি ডায়ালগের বাইরের দর্শনগুলির জন্য অর্থবোধ করে তবে এটি একটি ডায়লগ দর্শনের জন্য প্রযোজ্য নয়।
এডওয়ার্ড ব্রে

7
@ অ্যাডওয়ার্ড্রে আপনি ঠিকই বলেছেন - আমি নিবন্ধটি পুরোপুরি পড়িনি। এই বিশেষ ক্ষেত্রে, এটি হয় View.inflate(...null)বা অন্যটি ব্যবহার করা ঠিক আছে @SuppressLint। সাধারণভাবে, LayoutInflater.from(...).inflate(..., parent, false)ভাল। এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ!
জ্যাকসাহ্নওয়াল্ড্ট মনিকা

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

35

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

  1. @ সাপ্রেস ব্যবহার করে সতর্কতা দমন করুন
  2. দেখুন এর ব্যবহার দেখুন ফোলান ফোলান পদ্ধতি । এটি একটি লেআউটআইনফ্লেটারের চারপাশে কেবল একটি মোড়ক এবং বেশিরভাগ ক্ষেত্রে সমস্যাটি বিস্মৃত করে।
  3. LayoutInflater এর ব্যবহার দেখুন ফোলান পূর্ণ পদ্ধতি : inflate(int resource, ViewGroup root, boolean attachToRoot)। সেট attachToRootকরুন false.এটি স্ফীতকে বলে যে পিতামাতারা উপলব্ধ নেই।অ্যান্ড্রয়েড লিন্টের পুরানো সংস্করণগুলিতে এটি সতর্কতা সরিয়ে দিয়েছে। অ্যান্ড্রয়েড স্টুডিওর 1.0 সংস্করণ পোস্টের ক্ষেত্রে এটি আর নেই।

এই সমস্যাটির দুর্দান্ত আলোচনার জন্য http://www.doubleencore.com/2013/05/layout-inflation-as-ideded/ দেখুন , বিশেষত শেষে "প্রতিটি নিয়মের একটি ব্যতিক্রম আছে" বিভাগটি।


19

ভিউগ্রুপ হিসাবে নাল কাস্টিং সতর্কতার সমাধান করেছে:

View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);

যেখানে liহয় LayoutInflater'sঅবজেক্ট।


যেখানে 'লি' লেআউটআইনফ্লেটার অবজেক্ট।
এসভিএল নরসিমহাম

3
এই উত্তরটি সর্বোত্তম, আপনি কেন বুঝতে পারছেন তা বোঝার জন্য। ছোট গল্প যেমন আপনি ইতিমধ্যে পড়ে থাকতে পারেন, এটি হ'ল অ্যালার্টডায়ালগ স্ফীত সময়ে তার পিতামাতাকে জানে না, এবং তাই এটির একটি পার্শ্ব প্রতিক্রিয়া যা লিন্ট এই সঠিক পরিস্থিতিতে একটি সতর্কতা ছুড়ে দেয় যখন আপনি আসলে সঠিক জিনিসটি করছেন।
মার্ বার

আমি এই সতর্কবার্তা সম্পর্কে অসংখ্য উত্তর এবং পৃষ্ঠাগুলি পড়েছি তবে আপনার সমাধানটি এখন পর্যন্ত সেরা: সহজ এবং মার্জিত
কুইচি

9
তবে এটি
অনর্থক ingালাই

11
তারপরে আমরা আরও একটি সতর্কতা পেয়েছি "কাস্টিংটি নিরর্থক"!
মৌসা

17

আপনার ব্যবহার করা উচিত AlertDialog.Builder.setView(your_layout_id), যাতে আপনার এটি স্ফীত করার প্রয়োজন হয় না।

AlertDialog.findViewById(your_view_id)ডায়ালগ তৈরির পরে ব্যবহার করুন ।

ভিতরে এবং তারপর ভিতরে (AlertDialog) dialogInterfaceপেতে ব্যবহার করুন ।dialogOnClickListenerdialog.findViewById(your_view_id)


1
এভাবেই যেতে হবে! কেবল ডায়ালগ তৈরি করুন এবং তারপরে আপনার দৃশ্যটি সন্ধান করুন।
ব্যবহারকারী1806772

1
এটি করার একটি ভাল উপায়, তবে মনে রাখবেন যে এই পদ্ধতিটি এপিআই 21-এ যুক্ত হয়েছিল
নিকোলস ক্যারাসকো

আমাদের যদি অবশ্যই এই স্ফীত লেআউটটিকে কিছু পরিবর্তনশীলতে সঞ্চয় করতে হয়? উদাহরণস্বরূপ, আমি একটি ক্লাস লিখেছিলাম Aযেখানে পদ্ধতি রয়েছে onCreateDialog। পরবর্তীকালে, আমি OU হিসাবে লিখেছি alert_dialog_builder.setView(R.layout.edit_account_dialog);। তবে আমাকে এই স্ফীত লেআউটটি Aনামের অ্যাট্রিবিউট ভেরিয়েবলে সংরক্ষণ করতে হবে the_inflated_layout_of_the_dialog
জার্সফজাম-শিডিউলার

9

আপনাকে parentএকটি কথোপকথনের জন্য নির্দিষ্ট করার দরকার নেই ।

@SuppressLint("InflateParams")ওভাররাইডের শীর্ষে ব্যবহার করে এটি দমন করুন ।


7

যখন আপনার কাছে সত্যিই কোনও নেই parent(উদাহরণস্বরূপ দৃশ্য তৈরি করা AlertDialog), আপনার পাশ করার ব্যতীত অন্য কোনও উপায় থাকে না null। সতর্কতা এড়ানোর জন্য এটি করুন:

final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);

4
এটি আরেকটি সতর্কতা উত্পন্ন করে "মান 'নালপ্যারেন্ট' সর্বদা নাল।"
মল্লাউদিন

অ্যান্ড্রয়েডস্টুডিও 3.3 এবং এপিআই 28 হিসাবে, এটি কাজের সাথে একমাত্র সমাধান।
জিশান

1
  1. সতর্কতা ডায়ালগ যতদূর আমি জানি কেবলমাত্র আপনিই নিরাপদে নাল ব্যবহার করতে পারবেন পিতামাতার দেখার পরিবর্তে । এই ক্ষেত্রে আপনি ব্যবহার করে সতর্কতা দমন করতে পারেন:

    @SuppressLint ( "InflateParams")

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


0

এর ডকুমেন্টেশন থেকে View.inflate(), এটি বলে

একটি এক্সএমএল সংস্থান থেকে একটি ভিউ স্ফীত করুন। এই সুবিধা পদ্ধতিটি LayoutInflaterশ্রেণিকে মোড়কে দেয় , যা মূল্যবৃদ্ধি দেখার জন্য পুরো বিকল্পের সরবরাহ করে।

  @param context The Context object for your activity or application.
  @param resource The resource ID to inflate
  @param root A view group that will be the parent.  Used to properly inflate the  layout_* parameters.

0

Https://developer.android.com/guide/topics/ui/dialogs অনুসারে

সংলাপের জন্য লেআউটটি স্ফীত করুন এবং সেট করুন
প্যারেন্ট ভিউ হিসাবে নাল পাস করুন কারণ এটি ডায়ালগ বিন্যাসে চলছে

সুতরাং, সতর্কতা ডায়ালগ তৈরির জন্য, আমি ব্যবহার করি @SuppressLint("InflateParams")

LayoutInflater inflater = requireActivity().getLayoutInflater();
@SuppressLint("InflateParams")
View view = inflater.inflate(R.layout.layout_dialog, null);
builder.setView(view);

-1

পরিবর্তে না

view = inflater.inflate(R.layout.list_item, null);

করা

view = inflater.inflate(R.layout.list_item, parent, false);

এটি প্রদত্ত পিতামাতার সাথে এটি ফুলে উঠবে, তবে এটি পিতামাতার সাথে সংযুক্ত করবে না।

সহকারীকে অনেক ধন্যবাদ ( তাঁর পোস্টের লিঙ্ক )


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