এক্সএমএল অ্যারেতে আর.ড্রেবলযোগ্য আইডি সংরক্ষণ করা হচ্ছে


146

আমি R.drawable.*একটি এক্সএমএল মান ফাইল ব্যবহার করে অ্যারের ভিতরে আকারের মতো অঙ্কনযোগ্য সংস্থানগুলির আইডি সঞ্চয় করতে এবং তারপরে আমার ক্রিয়াকলাপে অ্যারেটি পুনরুদ্ধার করতে চাই।

এটিকে কীভাবে অর্জন করা যায় তার কোনও ধারণা?


1
আপনি "এক্সএমএল ব্যবহার করে একটি অ্যারের ভিতরে" বলতে কী বোঝাতে চেয়েছেন তা কি আপনি পরিষ্কার করতে পারেন?
ইউজিন এস

একটি মান ফাইল। উদাহরণস্বরূপ,
স্ট্রিং.এক্সএমএল

1
আপনি কেন এটি করতে চাইবেন তা আমি বুঝতে পারি না। আপনি কেন এইভাবে এটি করতে চান তা সম্পর্কে আপনি আরও কিছুটা ব্যাকগ্রাউন্ড সরবরাহ করতে পারেন?
ম্যাটার-

আপনার মতো শব্দগুলি প্রয়োজনের চেয়ে জটিল কিছু উপায়ে করার চেষ্টা করছেন।
অক্টাভিয়ান এ। ডেমিয়ান

3
আমি যা করার চেষ্টা করছি তা হল চিত্রের জন্য প্রদর্শিত আইডিগুলির জন্য আইডি সঞ্চয় করা।
গামারাপ্টর

উত্তর:


362

আপনি আপনার ফোল্ডারের মধ্যে ফাইলের মধ্যে টাইপ করা অ্যারে ব্যবহার করেন যা দেখতে এইরকম দেখাচ্ছে:arrays.xml/res/values

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <integer-array name="random_imgs">
        <item>@drawable/car_01</item>
        <item>@drawable/balloon_random_02</item>
        <item>@drawable/dog_03</item>
    </integer-array>

</resources>

তারপরে আপনার ক্রিয়াকলাপে এগুলি এর মতো অ্যাক্সেস করুন:

TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);

// get resource ID by index
imgs.getResourceId(i, -1)

// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));

// recycle the array
imgs.recycle();

1
আপনাকে অনেক ধন্যবাদ. আমি কোডটি মানিয়ে নিয়েছি এবং এখন এটি কার্যকর হয়। আপনাকে অনেক ধন্যবাদ.
gammaraptor 4'11

6
আরে আপনি কি imgs.getResourceId (i, -1) এর মানে বোঝাতে পারেন?
নিশাদ

6
প্রস্তাবনা: ব্যবহারকারী "imgs" পরে নিম্নলিখিত লাইনটি যুক্ত করুন: imgs.reयकल ();
benoffi7

9
আপনাকে ডিফল্ট আইডির জন্য -1 এর পরিবর্তে 0 ব্যবহার করা উচিত। -1 হ'ল একটি বৈধ সংস্থান আইডি, যখন 0 শূন্য সংস্থান।
অ্যালেক্স

6
চমত্কার! টাইপ করা অ্যারেগুলি মিষ্টি।
asgs

31

ইন valueফোল্ডার তৈরি xmlফাইলের নাম এটা arrays.xml এই ভাবে এটি তথ্য যোগ

<integer-array name="your_array_name">
    <item>@drawable/1</item>
    <item>@drawable/2</item>
    <item>@drawable/3</item>
    <item>@drawable/4</item>
</integer-array>

তারপরে এটি আপনার কোডটিতে এভাবে পান

private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);

তারপর একটি ব্যবহার করতে Drawableমধ্যে এগুলোর img TypedArrayএকটি যেমন উদাহরণস্বরূপ ImageView backgroundব্যবহার নিম্নলিখিত কোড

ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));

যেখানে indexহয় Drawableসূচক। defaultValueএটির কোনও মূল্য নেই যদি এতে কোনও আইটেম না থাকেindex

আরও তথ্যের জন্য সম্পর্কে TypedArrayএই লিঙ্কটি দেখুন http://developer.android.com/reference/android/content/res/TypedArray.html


15

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

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

এবং আপনার ক্রিয়াকলাপে এর মতো সংস্থানগুলি পান

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);

উপভোগ করুন !!!!!


1

কোটলিন উপায় এটি হতে পারে:

fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
  val array = context.resources.obtainTypedArray(this)
  block(array.getResourceId(index, -1))
  array.recycle()
}

R.array.random_imgs.resDrawableArray(context, 0) {
  mImgView1.setImageResource(it)
}

1

কোটলিনে আপনি এটি করতে পারেন:

 <integer-array name="drawer_icons">
    <item>@drawable/drawer_home</item>
</integer-array>

আপনি উত্স থেকে ইমেজের অ্যারে পাবেন TypedArray

 val imageArray = resources.obtainTypedArray(R.array.drawer_icons)

সূচক দ্বারা সংস্থান আইডি পান

imageArray.getResourceId(imageArray.getIndex(0),-1)

অথবা আপনি আইডিতে ইমেজভিউয়ের সংস্থান সেট করতে পারেন

imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))

এবং সর্বশেষে অ্যারে পুনর্ব্যবহার করুন

imageArray.recycle()

-2

আমার জানা মতে আপনি আর.ড্রেবলে আরে সংরক্ষণ করতে পারবেন না।

কি আপনি কি করতে পারেন config.xml বা strings.xml মধ্যে একটি অ্যারের যে ব্যবহার করে একটি অঙ্কনযোগ্য সম্পদ একটি পাথ মানচিত্র তৈরি করুন নেই ওরফে রিসোর্স

এটি কাজ করে কিনা দেখুন এবং আপনার কোনও অতিরিক্ত সহায়তার দরকার হলে দয়া করে আমাকে জানান।


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