পরিচিত সংস্থার নাম সহ কীভাবে কোনও সংস্থান আইডি পাবেন?


178

আমি তার নাম দিয়ে স্ট্রিং বা ড্রয়যোগ্য এর মতো কোনও সংস্থান অ্যাক্সেস করতে চাই এবং এটির আইডি নয়।

আমি এর জন্য কোন পদ্ধতিটি ব্যবহার করব?



উইকিপিডিয়া জানিয়েছে কোটলিন প্রথম ২০১১ সালে হাজির হয়েছিল, আপনি ২০১০ সালে কীভাবে একটি প্রশ্ন জিজ্ঞাসা করতে পারেন
অভিনব চৌহান

উত্তর:


149

এটি এমন কিছু হবে:

R.drawable.resourcename

নিশ্চিত হয়ে নিন যে আপনার Android.Rনেমস্পেসটি আমদানি করা হয়নি কারণ এটি গ্রহটিকে বিভ্রান্ত করতে পারে (যদি আপনি এটি ব্যবহার করেন তবে)।

যদি এটি কাজ না করে, আপনি সর্বদা একটি প্রসঙ্গের getResourcesপদ্ধতি ব্যবহার করতে পারেন ...

Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);

যেখানে this.contextএকটি Activity, Serviceবা অন্য কোনও Contextসাবক্লাস হিসাবে অন্তর্নিহিত রয়েছে ।

হালনাগাদ:

আপনি যদি নামটি চান তবে এটি Resourcesক্লাসের (ফিরে getResources()) একটি getResourceName(int)পদ্ধতি আছে এবং ক getResourceTypeName(int)?

আপডেট 2 :

Resourcesবর্গ এই পদ্ধতি রয়েছে:

public int getIdentifier (String name, String defType, String defPackage) 

যা নির্দিষ্ট সংস্থার নাম, প্রকার এবং প্যাকেজটির পূর্ণসংখ্যাকে প্রদান করে।


আপনার জবাবের জন্য ধন্যবাদ .আর.ড্রেবলযোগ্য.প্রসূত নাম আমি এখন ব্যবহার করছি আমার রিসোর্সনাম পাস করে এর পূর্ণসংখ্যার মানটি অর্জন করা দরকার
আসওয়ান

2
R.drawable.resourcename হয় পূর্ণসংখ্যা।
রবিদ

হাই রবিড.আপনি কি বলেছিলেন যে আর.ড্রেব্যাবল .স্রোতের মান অ্যাক্সেসের মাধ্যমে কোনও উপায় নেই পুনর্সঠন পেরিয়ে
আসওয়ান

গতিশীলভাবে
আসওয়ান

আমি এটি চাই এবং আমি এটির মতো আকর্ষণীয় সংস্থান আইডি পেতে চাই
আসওয়ান

339

যদি আমি সঠিক বুঝতে পারি তবে আপনি যা চান তা এই

int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());

"এটি" একটি ক্রিয়াকলাপ যেখানে কেবল স্পষ্ট করার জন্যই রচিত written

আপনি যদি স্ট্রিং.এক্সএমএল এ স্ট্রিং চান বা কোনও ইউআই উপাদান সনাক্তকারী চান তবে "অঙ্কনযোগ্য"

int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName());

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

অফিসিয়াল ডকুমেন্টেশনের লিঙ্ক: রিসোর্স.জেটআইডিটিফায়ার (স্ট্রিং নাম, স্ট্রিং ডিফটাইপ, স্ট্রিং ডিফপ্যাকেজ)


3
কিছু নির্দিষ্ট স্ট্রিং রয়েছে কিনা তা নিশ্চিত করতে পরীক্ষা লেখার প্রসঙ্গে এটি বেশ কার্যকর
এহতেশ চৌধুরী

1
আমি মানুষকে চিনি না, টাইমস্ট্যাম্পের সাথে getIdentifier () এর আগে এবং পরে আমি একটি লগ যুক্ত করেছি এবং এটি আমাকে দেখিয়েছিল যে এটি 0 - 1 এমএসে কার্যকর হয়! সুতরাং এটি ধীর নয়, এটি সুপার দ্রুত! আমি এটি উত্স থেকে চিত্র পেতে ব্যবহার করছি এবং এটি পুরোপুরি কার্যকর হয়। Nexus5x এ পরীক্ষা করা হয়েছে।
কিরিল কারমাজিন 21

1
@ কিরিলকর্মাজিন: নেক্সাস 5 এক্স একটি শালীন দ্রুতগতির ফোন, এবং এই জাতীয় কলটির জন্য 1 মিমি বেশ ধীর। মনে রাখবেন যে প্রতিটি ইউআই ফ্রেম কেবল 16 মাইল is
মাকিং হাঁস

উইকিপিডিয়া জানিয়েছে কোটলিন প্রথম ২০১১ সালে হাজির হয়েছিল, আপনি ২০১০ সালে এ সম্পর্কে একটি প্রশ্নের উত্তর কীভাবে দিতে পারেন
অভিনব চৌহান

25
int resourceID = 
    this.getResources().getIdentifier("resource name", "resource type as mentioned in R.java",this.getPackageName());

15

Kotlin Versionমাধ্যমেExtension Function

কোটলিনে এর নামে কোনও সংস্থান আইডি সন্ধান করতে কোটলিন ফাইলে স্নিপেটের নীচে যুক্ত করুন:

ExtensionFunctions.kt

import android.content.Context
import android.content.res.Resources

fun Context.resIdByName(resIdName: String?, resType: String): Int {
    resIdName?.let {
        return resources.getIdentifier(it, resType, packageName)
    }
    throw Resources.NotFoundException()
}


Usage

resIdByNameপদ্ধতি ব্যবহার করে আপনার যেখানে প্রসঙ্গের রেফারেন্স রয়েছে এখনই সমস্ত সংস্থান আইডিতে অ্যাক্সেসযোগ্য :

val drawableResId = context.resIdByName("ic_edit_black_24dp", "drawable")
val stringResId = context.resIdByName("title_home", "string")
.
.
.    

উইকিপিডিয়া বলছে কোটলিন প্রথম ২০১১ সালে হাজির হয়েছিল, আপনি কি দয়া করে আমাকে বলতে পারেন যে এই প্রশ্নটি ২০১০ সালে কীভাবে জিজ্ঞাসা করা হয়েছিল, এবং এটি ২০১২ সালে অ্যান্ড্রয়েডের জন্য ঘোষণা করা হয়েছিল, তাকে কীভাবে কোটলিন অ্যান্ড্রয়েড প্রশ্ন জিজ্ঞাসা করা হয়েছে ২০১০
অভিনব চৌহান

14

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

int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
ImageView im = (ImageView) findViewById(resID);
Context context = im.getContext();
int id = context.getResources().getIdentifier(resourceName, "drawable",
context.getPackageName());
im.setImageResource(id);

6

আমি আপনাকে আমার পদ্ধতিটি ব্যবহার করে কোনও সংস্থান আইডি পাওয়ার পরামর্শ দিচ্ছি। এটি getIdentidier () পদ্ধতিটি ব্যবহারের চেয়ে অনেক বেশি দক্ষ, যা ধীর।

কোডটি এখানে:

/**
 * @author Lonkly
 * @param variableName - name of drawable, e.g R.drawable.<b>image</b>
 * @param с - class of resource, e.g R.drawable.class or R.raw.class
 * @return integer id of resource
 */
public static int getResId(String variableName, Class<?> с) {

    Field field = null;
    int resId = 0;
    try {
        field = с.getField(variableName);
        try {
            resId = field.getInt(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resId;

}

এটি সব ক্ষেত্রে কার্যকর হবে না। উদাহরণস্বরূপ যদি আপনার কাছে আর স্ট্রিং ক্লাসের চেয়ে <স্ট্রিং নাম = "স্ট্রিং.নেম"> সামগ্রী </ স্ট্রিং> থাকে তবে তার স্ট্রিং_নাম থাকবে। এবং আপনার পদ্ধতি এই পয়েন্টে কাজ করবে না।
ddmytrenko

3
এছাড়াও আপনার পদ্ধতিটি আসলে দ্রুত নয়। কারণ জাভা ক্লাস সিরিয়ালাইজেশন কখনই দ্রুত কাজ করে না।
ddmytrenko

5
// image from res/drawable
    int resID = getResources().getIdentifier("my_image", 
            "drawable", getPackageName());
// view
    int resID = getResources().getIdentifier("my_resource", 
            "id", getPackageName());

// string
    int resID = getResources().getIdentifier("my_string", 
            "string", getPackageName());

0

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

public static String getString(Context context, String stringId) {
    int sid = getStringId(context, stringId);
    if (sid > 0) {
        return context.getResources().getString(sid);
    } else {
        return "";
    }
}

উইকিপিডিয়া বলছে কোটলিন প্রথম ২০১১ সালে হাজির হয়েছিল, আপনি কি দয়া করে আমাকে বলতে পারেন যে এই প্রশ্নটি ২০১০ সালে কীভাবে জিজ্ঞাসা করা হয়েছিল, এবং এটি ২০১২ সালে অ্যান্ড্রয়েডের জন্য ঘোষণা করা হয়েছিল, তাকে কীভাবে কোটলিন অ্যান্ড্রয়েড প্রশ্ন জিজ্ঞাসা করা হয়েছে ২০১০
অভিনব চৌহান

0

@ লঙ্কলি সমাধান ছাড়াও

  1. প্রতিচ্ছবি এবং ক্ষেত্রের অ্যাক্সেসযোগ্যতা দেখুন
  2. অপ্রয়োজনীয় ভেরিয়েবল

পদ্ধতি:

/**
 * lookup a resource id by field name in static R.class 
 * 
 * @author - ceph3us
 * @param variableName - name of drawable, e.g R.drawable.<b>image</b>
 * @param с            - class of resource, e.g R.drawable.class or R.raw.class
 * @return integer id of resource
 */
public static int getResId(String variableName, Class<?> с)
                     throws android.content.res.Resources.NotFoundException {
    try {
        // lookup field in class 
        java.lang.reflect.Field field = с.getField(variableName);
        // always set access when using reflections  
        // preventing IllegalAccessException   
        field.setAccessible(true);
        // we can use here also Field.get() and do a cast 
        // receiver reference is null as it's static field 
        return field.getInt(null);
    } catch (Exception e) {
        // rethrow as not found ex
        throw new Resources.NotFoundException(e.getMessage());
    }
}

উইকিপিডিয়া বলছে কোটলিন প্রথম ২০১১ সালে হাজির হয়েছিল, আপনি কি দয়া করে আমাকে বলতে পারেন যে এই প্রশ্নটি ২০১০ সালে কীভাবে জিজ্ঞাসা করা হয়েছিল, এবং এটি ২০১২ সালে অ্যান্ড্রয়েডের জন্য ঘোষণা করা হয়েছিল, তাকে কীভাবে কোটলিন অ্যান্ড্রয়েড প্রশ্ন জিজ্ঞাসা করা হয়েছে ২০১০
অভিনব চৌহান

0

কোটলিনে নিম্নলিখিতগুলি আমার পক্ষে ভাল কাজ করে:

val id = resources.getIdentifier("your_resource_name", "drawable", context?.getPackageName())

যদি সংস্থানগুলি মিপম্যাপ ফোল্ডারে থাকে তবে আপনি "অঙ্কনযোগ্য" পরিবর্তে প্যারামিটার "মিপম্যাপ" ব্যবহার করতে পারেন।

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