ক্রিয়াকলাপে নেই এমন স্থানে getoutLayoutInflater () এ কল করুন


189

কী আমদানি করা দরকার বা কীভাবে আমি ক্রিয়াকলাপ বাদে অন্য জায়গায় লেআউটকে ইনফ্লেটার বলতে পারি?

public static void method(Context context){
    //this doesn't work the getLayoutInflater method could not be found
    LayoutInflater inflater = getLayoutInflater();
    // this also doesn't work 
    LayoutInflater inflater = context.getLayoutInflater();
}

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

ক্রিয়াকলাপ শ্রেণিতে নেই এমন কোডের জায়গাগুলিতে আমার স্ফীতক প্রয়োজন।

কিভাবে আমি এটি করতে পারব ?

উত্তর:


396

আপনি এটি বাইরের ক্রিয়াকলাপগুলি ব্যবহার করতে পারেন - আপনার কেবলমাত্র একটি সরবরাহ করা প্রয়োজন Context:

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

তারপরে আপনার বিভিন্ন উইজেটগুলি পুনরুদ্ধার করতে, আপনি একটি লেআউট স্ফীত করুন:

View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );

2014 সালের জুলাই পর্যন্ত সম্পাদনা করুন

কীভাবে পাওয়া যায় সে সম্পর্কে ডেভিডের উত্তরটিLayoutInflater আমার চেয়ে আসলে আরও সঠিক (যা এখনও বৈধ।


দুর্দান্ত, তবে এখন সন্ধান ভিউআইআইডি কাজ করে না, সে সম্পর্কে আপনার কোনও ধারণা আছে? inflater.inflate (R.layout.some_layout, (ভিউগ্রুপ) ফাইন্ড ভিউবিআইআইডি (আর.আইডি.প্যারেন্ট));
Lukap

হ্যাঁ, inflater.inflate () পদ্ধতিতে মাত্র একটি ইন প্যারাম দিয়ে ওভারলোডেড পদ্ধতি নেই, তবে আমি অনুমান করি যে পরবর্তীটিটি নাল হতে পারে।
Lukap

@ ক্যাস্পারময়েরচ কেন আপনি ডেভিডের উত্তরটি আরও সঠিক বলেছিলেন?
রোহান ভাটিয়া

1
@ রোহান ভাটিয়া ডেভিডস উত্তরটির জন্য আমার কোনটি কাস্টিং প্রয়োজন হয় না। যদি getSystemServiceকিছু (অসম্ভাব্য) কারণে কল যদি কোনও প্রকারের বস্তুটি না ফেরায় LayoutInflaterতবে আমার কোডটি রানটাইম ব্যতিক্রম ঘটায়।
kaspermoerch

আমার জন্য কাজ করেছেন। ধন্যবাদ
কোডফ্লুয়েড

260

বা ...

LayoutInflater inflater = LayoutInflater.from(context);

5
খুব দেরিতে, তবে আসলে ফাংশন হিসাবে একটি ভাল উত্তরটিও দৃ with়ভাবে পরীক্ষা করে যে আপনি আসলে একটি স্ফীতকারী ফিরে পেয়েছেন এবং অন্যথায় একটি ত্রুটি নিক্ষেপ করেছেন - যা কোডের কোথাও কোথাও নাল পয়েন্টার বহির্গমনকে মোকাবেলা করা অনেক সহজ হবে। grepcode.com/file/repository.grepcode.com/java/ext/…
রায়ানান

38
এত সংক্ষিপ্ত, অনেক
স্ফীত

@ ডেভিড এই উদ্ধৃতিটির অর্থ কি ক্যাস্পর্মোয়ার্চের সমাধান আপনার চেয়ে ভাল? "এটি কখনই সরাসরি ব্যবহার করা হয় না Instead পরিবর্তে, ইতিমধ্যে বর্তমান প্রেক্ষাপটে আবদ্ধ হওয়া এবং আপনি যে ডিভাইসটি চালাচ্ছেন তার জন্য সঠিকভাবে কনফিগার করা একটি আদর্শ লেআউটআইনফ্লেটার পুনরুদ্ধার করতে getLayoutInflater () বা getSystemService (Class) ব্যবহার করুন" " বিকাশকারী.অ্যান্ড্রয়েড
রেফারেন্স / অ্যান্ড্রয়েড / ভিউ / লেআউটআইনফ্লেটার

@ ট্যামস বলভারি কেবল আরও সহজ এবং স্পষ্ট, বাস্তবে অভ্যন্তরীণ বাস্তবায়ন ক্যাসপারমোরচ লেখার মতোই।
ডেভিড

11

অথবা

View.inflate(context, layout, parent)


সেটা ঠিক আছে ; তবে, এই পদ্ধতির সাহায্যে, আমি বুলিয়ান "সংযুক্তি ট্রুট" সরবরাহ করতে পারি না
ডেনিসজিএল

এটি প্রয়োজনীয়তার উপর ভিত্তি করে তৈরি করা হয়, যদি আপনার যদি AttToRoot এর প্রয়োজন না হয় তবে এটি একটি সুবিধাজনক সহায়ক পদ্ধতি বা পদ্ধতির অভিভাবক হিসাবে getRootView () পাস করুন।
প্রকাশ নাদার

9

কনটেক্সট অবজেক্ট ব্যবহার করে আপনি নিম্নলিখিত কোড থেকে লেআউটআইনফ্লেটার পেতে পারেন

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


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