ইমেজভিউতে চিত্র সেট করতে গতিশীলভাবে সেটআইমেজড্র্যাবেবল ব্যবহার করা


120

আমি গতিশীলভাবে ডাটাবেস থেকে একটি স্ট্রিং তৈরি করছি যা drawableফোল্ডারে চিত্রের একই নাম রয়েছে ।

গতিশীলভাবে ImageViewব্যবহারের জন্য এখন আমি সেই মানটি সেট করতে চাই setImageDrawable(R.id.StringGenerated)

কোনও পরামর্শ..


এর অর্থ আপনি গতিশীল চিত্রটির আইডি তৈরি করছেন, তাই না?
পরেশ মায়ানী

উত্তর:


195

এটা চেষ্টা কর,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);

এটি আপনি যে অঙ্কনীয় অ্যাক্সেস করতে চান তার আইডিটি ফিরিয়ে দেবে ... তারপরে আপনি নীচের কাজগুলি করে চিত্রের দৃশ্যে চিত্রটি সেট করতে পারেন

imageview.setImageResource(id);

ধন্যবাদ একটি টন .. আমি এটি অন্য কোথাও পেয়েছি বিটি এখনও আপনার প্রচেষ্টার জন্য ধন্যবাদ .. :)
অরুণ

12
তবে সেটআইমেজআরসোর্স () ব্যবহার করে "বিআইটি ম্যাপটি ইউআই থ্রেডে রিডিং এবং ডিকোডিং করে যা একটি বিলম্বিত হিচাপের কারণ হতে পারে ... সেটআইমেজড্র্যাবল () বা সেটআইমেজবিটম্যাপ () ব্যবহার করে বিবেচনা করুন" " (অ্যান্ড্রয়েড ডকুমেন্টেশন)
চেটো

6
আপনি কেবল ব্যবহার করে আইডিটি পেতে পারেন: আর.ড্রেবলযোগ্য.ফিলম্যান
আর্তুর

102
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
            ImageView imgView = new ImageView(context);
            imgView = (ImageView)findViewById(R.id.image1);
            imgView.setImageDrawable(image);

অথবা

setImageDrawable(getResources().getDrawable(R.drawable.icon));

তিনি বলেছিলেন যে একই চিত্রের নামের সাথে তিনি গতিশীলভাবে ডাটাবেস থেকে একটি স্ট্রিং তৈরি করছেন।
পরেশ মায়ানী

3
getDrawable (R.drawable.icon) অবনতি হয়েছে
ড্যারেন

যে সকল লোকদের getDrawable (R.drawable.icon) সমাধান করা দরকার তাদের জন্য এই এসও লিঙ্কটি
কোডিংপান

77

আমি ব্যক্তিগতভাবে setImageResource()এই পদ্ধতিটি ব্যবহার করতে পছন্দ করি ।

ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);

1
এটি আপনার বিজয়ী হতে পারে কারণ আপনার কোডের যে কোনও জায়গা থেকে আপনি চিত্রটি পরিবর্তন করতে চাইতে পারেন যেখানে আপনি getRes્રોત્રો () পদ্ধতিতে কল করার প্রসঙ্গটি রাখেন না। যেমন অ্যাডাপ্টারগুলিতে। কেবল এই ছদ্মবেশের জন্য কনস্ট্রাক্টরের মাধ্যমে প্রসঙ্গ পাস করার দরকার নেই।
Phatee পি

1
উপায় পরিষ্কার। কেন এটি পছন্দসই উত্তর নয় তা আমি পাই না।
বেনিয়ামিন বাসমাকি

@ বেঞ্জামিনবাস্মসি এটি ইউআই থ্রেডে বিটম্যাপটি পড়ে এবং ডিকোডিং করে যা একটি বিলম্বিত হিচাপির কারণ হতে পারে। যদি এটি উদ্বেগের বিষয় হয়ে থাকে তবে এর পরিবর্তে সেটআইমেজড্র্যাব্যাবল (অ্যান্ড্রয়েড.গ্রাফিক্স.ড্রেভ্যাবল.ড্রেভ্যাবল) বা সেটআইমেজবিটম্যাপ (অ্যান্ড্রয়েড.গ্রাফিক্স.বিটম্যাপ) এবং বিটম্যাপফ্যাক্টরি ব্যবহার করে বিবেচনা করুন। (অ্যান্ড্রয়েড ডকুমেন্টেশন থেকে)
তৈয়ব মাজহার

25

রিসোর্স অঙ্কনযোগ্য নামগুলি স্ট্রিং হিসাবে সংরক্ষণ করা হয় না, তাই আপনাকে বিল্ড চলাকালীন সংখ্যার ধ্রুবকটিতে স্ট্রিংটি সমাধান করতে হবে। আপনি Resourcesপূর্ণসংখ্যার স্ট্রিং সমাধান করতে ক্লাসটি ব্যবহার করতে পারেন ।

Resources res = getResources();
int resourceId = res.getIdentifier(
   generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );

এটি আপনার উত্পন্ন স্ট্রিংটিকে পূর্ণসংখ্যার সাথে সমাধান করে ImageViewযা ডান চিত্রটি লোড করতে ব্যবহার করতে পারে।

বিকল্পভাবে, আপনি Drawableম্যানুয়ালি লোড করতে আইডিটি ব্যবহার করতে পারেন এবং তারপরে রিসোর্স আইডির পরিবর্তে সেই ছবিটি ব্যবহার করে চিত্রটি সেট করতে পারেন ।

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );

@ গ্রেইসন ... খুব সুন্দর একজন স্যার..তিনি যা খুজছি .. অনেক অনেক ধন্যবাদ .. :)
অরুণ


8

এটি কমপক্ষে অ্যান্ড্রয়েড এপিআই 15 এ কাজ করে

ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);

আপনি সেট ইমেজআর রিসোর্স () ব্যবহার করতে পারেন, তবে ডকুমেন্টেশনটি উল্লেখ করে যে "বিটম্যাপটি ইউআই থ্রেডে পড়ার এবং ডিকোডিং করে যা একটি বিলম্বিত হিচাপের কারণ হতে পারে ... সেটআইমেজড্রেইবল () বা সেটআইমেজবিটম্যাপ () ব্যবহার করে বিবেচনা করুন" " চেটো দ্বারা বিবৃত হিসাবে


7

পোস্ট করা সমস্ত উত্তর আজ প্রযোজ্য নয়। উদাহরণস্বরূপ, getDrawable () অবমূল্যায়ন করা হয়। এখানে একটি আপডেট উত্তর, চিয়ার্স!

ContextCompat.getDrawable(mContext, drawable)

নথিভুক্ত পদ্ধতি থেকে

পাবলিক স্ট্যাটিক চূড়ান্ত android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context কনটেক্সট,
@ android.support.annotation.DrawableRes int- এ আইডি


অবজ্ঞাত অংশ উল্লেখ করার জন্য ধন্যবাদ।
করণ শর্মা

6

আপনি এই কোডটি ব্যবহার করার চেষ্টা করতে পারেন:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);

4

আপনি যদি কোনও ক্লাসে কোনও ক্রিয়াকলাপ নয় এমন রিসোর্সস অবজেক্টটি যদি না পান তবে উদাহরণস্বরূপ, getResource () এর জন্য getContext () পদ্ধতি যুক্ত করতে হবে

ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);


2

আপনি এর মতো কিছু ব্যবহার করতে পারেন:

imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(), R.drawable.generatedID));

বা পিকাসো ব্যবহার করে:

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);


0

আপনার মত সমস্যাও আমার ছিল এবং এটি সমাধানের জন্য আমি নিম্নলিখিতগুলি করেছি:

**IMAGEVIEW**.setImageResource(getActivity()
             .getResources()
             .getIdentifier("**IMG**", "drawable", getActivity()
             .getPackageName()));

0

একটি POJO.java ক্লাস তৈরি করুন এবং "কনস্ট্রাক্টর, গেটর এবং সেটার পদ্ধতি" তৈরি করুন

class POJO{
        public POJO(Drawable proImagePath) {
                setProductImagePath(proImagePath);
        }

        public Drawable getProductImagePath() {
                return productImagePath;
        }

        public void setProductImagePath(Drawable productImagePath) {
                this.productImagePath = productImagePath;
        }
}

তারপরে কাস্টমএডাপ্টার.জভাতে চিত্র অঙ্কনযোগ্য সংস্থার মাধ্যমে অ্যাডাপ্টার সেটআপ করুন

    class CustomAdapter extends ArrayAdapter<POJO>{

       private ArrayList<POJO> cartList = new ArrayList<POJO>();
       public MyCartAdapter(Context context, int resource) {
          super(context, resource);
       }

       public MyCartAdapter(Context context, ArrayList<POJO> cartList) {
          super(context, 0, cartList);
          this.context = context;
          this.cartList = cartList;

       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
          /*
          *Here you can setup your layout and references.
          **/
          ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image);
          productImage.setImageDrawable(POJO.getProductImagePath());
        }
    }

তারপরে রেফারেন্সগুলি ActivityClass.java এর মাধ্যমে পাস করুন

public class MyCartActivity extends AppCompatActivity{
       POJO pojo;
       CustomAdapter customAdapter;
       ArrayList<POJO> cartList = new ArrayList<POJO>();

       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.your_layout);

          customAdapter = new CustomAdapter(this, cartList);

          pojo = new POJO(getResources().getDrawable(R.drawable.help_green));

    }
}

-3

আমার প্রকল্পের একটি অংশ, সবকিছু কাজ করে! )

@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final ModelSystemTraining modelSystemTraining = items.get(position);

int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName());

        final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder;
        final View itemView = fragmentViewHolderSystem.itemView;
//                Set Icon
fragmentViewHolderSystem.trainingIconImage.setImageResource(icon);
//                Set Title
fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle());
//                Set Desc
fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription());

এই কোডটি কেন কাজ করা উচিত সে সম্পর্কে আপনার সত্যিই কিছু ব্যাখ্যা যুক্ত করা উচিত - আপনি কোডটিতে নিজেই মন্তব্যগুলি যুক্ত করতে পারেন - এটির বর্তমান আকারে, এটি কোনও ব্যাখ্যা সরবরাহ করে না যা আপনার সম্প্রদায়ের বাকী অংশগুলিকে বুঝতে সহায়তা করতে পারে যে আপনি কী সমাধান করেছেন? /প্রশ্নটির উত্তর দাও.
ishmaelMakitla


-4

অ্যাপটির রান সময়ে 'আর' ফাইলটি তৈরি করা যায় না generated আপনি অন্য কিছু বিকল্প যেমন ব্যবহার if-elseবা ব্যবহার করতে পারেনswitch-case


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