Wie stelle ich ImageViews-Quelle dynamisch aus ArrayList <String> mit beziehbarem Bildnamen ein?

Ich habe eine ListView mit einem ImageView, einem TextView und einem anderen ImageView in jeder Zeile.

Der Code unten ist die xml meiner ListView Zeile:

  • Ist es möglich, die Textfarbe auf einem Android SearchView zu ändern?
  • Beende die Aktivität in der Dialogklasse
  • Jede Erfahrung mit Android NDK?
  • SmoothScrollToPositionFromTop für Froyo ListView?
  • Ausschluss spezifischer Buildvarianten
  • Android - MediaPlayer Puffergröße in ICS 4.0
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp" android:background="#FFF"> <ImageView android:id="@+id/left" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:src="@drawable/ic_default" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" /> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" android:textSize="16sp" /> <ImageView android:id="@+id/right" android:layout_width="50dp" android:layout_height="match_parent" android:layout_gravity="center" android:src="@drawable/ic_cena_play" android:layout_marginRight="0dp" android:layout_marginLeft="10dp" android:clickable="true" android:background="@drawable/mybuttonplay" /> </LinearLayout> 

    Ich habe eine ArrayList <String> mit den Namen von Drawables Ich möchte in die erste ImageView der Zeilen setzen. Ich möchte die ImageViews-Quelle "ic_default" zu denen wechseln, die den Namen in ArrayList haben, dinamisch.

    In meiner Tätigkeit, inside onCreate (), benutze ich einen Adapter, wie der Code unten:

     ArrayList<String> items = new ArrayList(); items.add("Star"); items.add("Moon"); items.add("Dog"); items.add("Bird"); items.add("Tree"); ArrayList<String> itemsimg = new ArrayList(); itemsimg.add("ic_star"); itemsimg.add("ic_moon"); itemsimg.add("ic_dog"); itemsimg.add("ic_bird"); itemsimg.add("ic_tree"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.scenesrow, R.id.text, items) { @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); ImageView left = (ImageView) row.findViewById(R.id.left); //here I want to change the resource //Like if I had a function called getRosourceId(). DOES IT EXIST?! int x = getResourceId( itemsimg.get(position) ); left.setImageResource(x); View right = row.findViewById(R.id.right); right.setTag(position); right.setOnClickListener(ScenesActivity.this); return row; } }; 

    Aktualisiert

    Danke für Antworten! Jetzt kann ich die ImageView-Quelle dinamisch ändern (aber noch nicht aus der ArrayList <String>) . Die Methode setImageResource () war vorher nicht verfügbar, da ich eine Ansicht hatte. Mit der Besetzung zu ImageView haben Sie alle vorgeschlagen, ein großer Teil des Problems war okay. Aber die Antworten decken nicht die dinamische Sache des "Namens der Ressource" ab.

    Das letzte Problem ist jetzt die left.setImageResource (resId); Methode fragt nach einer ID aus Ressource, und ich habe eine Zeichenfolge. Wie es geht?

    Und sorry, andere Code-Version hatte einige Fehler. Jetzt ist es behoben. Ich denke, das letzte Problem ist jetzt klar.

  • In Android sollte ein Kontakt-Sync-Adapter in einem separaten Prozess laufen?
  • SingleTask launchMode in android funktioniert nicht
  • Unterschied zwischen ApplicationInfo und PackageInfo?
  • Ist es möglich, Android SDK Methoden mit @hide Annotation verwenden?
  • Android IABv3 getSkuDetails nicht zurückgeben Sku Details
  • Android: ListView.getScrollY () - funktioniert es?
  • 4 Solutions collect form web for “Wie stelle ich ImageViews-Quelle dynamisch aus ArrayList <String> mit beziehbarem Bildnamen ein?”

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.scenesrow, R.id.text, items) { @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); ImageView left = (ImageView)row.findViewById(R.id.left); left.setOnClickListener(ScenesActivity.this); ImageView right = (ImageView)row.findViewById(R.id.right); right.setTag(position); right.setImageResource(itemsimg.get(position)); left.setImageResource(itemsimg.get(position)); right.setOnClickListener(ScenesActivity.this); return row; } 

    Artikel ändern mit:

     ArrayList<Integer> itemsimg = new ArrayList<Integer>(); itemsimg.add(R.drawable.ic_star); itemsimg.add(R.drawable.ic_moon); itemsimg.add(R.drawable.ic_dog); itemsimg.add(R.drawable.ic_bird); itemsimg.add(R.drawable.ic_tree); 

    Für immer drawableId mit String kannst du das machen:

     Context context = imageView.getContext(); int id = context.getResources().getIdentifier("ic_tree", "drawable", context.getPackageName()); imageView.setImageResource(id); 

    Es ist nicht effizient, aber es funktioniert, um gelegentliche Ressourcen zu sehen.

    Ersetzen Sie Ihren Code wie folgt:

     ArrayList<String> items = new ArrayList(); items.add("ic_star"); items.add("ic_moon"); items.add("ic_dog"); items.add("ic_bird"); items.add("ic_tree"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.scenesrow, R.id.text, items) { @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); ImageView left = (ImageView) row.findViewById(R.id.left); left.setOnClickListener(ScenesActivity.this); left.setImageResource(R.drawable.leftphoto); ImageView right = (ImageView) row.findViewById(R.id.right); right.setTag(position); right.setOnClickListener(ScenesActivity.this); right.setImageResource(R.drawable.rightphoto); return row; } }; 

    Versuche dies::

     right.setImageResource(R.drawable.addphoto);/*select a picture from drawable*/ 

    Gleich für links auch

     left.setImageResource(R.drawable.addphoto);/*select a picture from drawable*/ 

    Nach Diskussion

      ArrayList<String> items = new ArrayList(); items.add("ic_star"); items.add("ic_moon"); items.add("ic_dog"); items.add("ic_bird"); items.add("ic_tree"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.scenesrow, R.id.text, items) { @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); /*View : not required to declare everytimes*/ ImageView left = row.findViewById(R.id.left); left.setOnClickListener(ScenesActivity.this); ImageView right = row.findViewById(R.id.right); right.setTag(position); right.setOnClickListener(ScenesActivity.this); right.setImageResource(R.drawable.addphoto);/*select a picture from drawable*/ left.setImageResource(R.drawable.addphoto);/*select a picture from drawable*/ return row; } }; 

    Eine weitere einfache und strukturierte Art und Weise:

    1) fügen Sie die Ressourcen in Ihrem Zeichnungsordner hinzu, lassen Sie annehmen (ic_home, ic_launcher, ic_logout) // Sie können beliebig viele Bilder hinzufügen

    2) fügen Sie diese Namen in die Strings.xml, die im Werteordner vorhanden sind, zusammen mit den Namen, die neben dem Bild angezeigt werden. So würde es so aussehen …

      <!-- Drawer List Items --> <string-array name="nav_drawer_items"> <item>Home</item> <item>Add Category</item> <item>Logout</item> </string-array> <string-array name="nav_drawer_icons"> <item>ic_home</item> <item>ic_addcategory</item> <item>ic_logout</item> </string-array> 

    3) Jetzt erstellen Sie eine pojo (getter / setter) Klasse, die den Icon Text und Icon id in einem Objekt halten wird. Etwas wie das..

     public class DrawerItems { private String icnName; private int icnId; /** * @return the icnName */ public String getIcnName() { return icnName; } /** * @param icnName * the icnName to set */ public void setIcnName(String icnName) { this.icnName = icnName; } /** * @return the imageid */ public int getIcnId() { return icnId; } /** * @param imageid * the imageid to set */ public void setIcnId(int imageid) { icnId = imageid; }} 

    4) Jetzt müssen wir das bevölkern, bevor wir es dem Adapter geben. Wir könnten dies auf diese Weise tun

     private DrawerItems navigationDrawerItems; private ArrayList<DrawerItems> dataObjects; private String[] mDrawerListItems; private String[] mDrawerIcons; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // to fetch the resources from the string files mDrawerListItems = getResources().getStringArray( R.array.nav_drawer_items); mDrawerIcons = getResources().getStringArray(R.array.nav_drawer_items); // drawerListAdapter = new DrawerListAdapter(this, mDrawerListItems); dataObjects = new ArrayList<DrawerItems>(); for (int i = 0; i < mDrawerListItems.length; i++) { navigationDrawerItems = new DrawerItems(); navigationDrawerItems.setIcnName(mDrawerListItems[i]); navigationDrawerItems.setIcnId(getResources().getIdentifier( mDrawerIcons[i], "drawable", this.getPackageName())); dataObjects.add(navigationDrawerItems); } drawerListAdapter = new DrawerListAdapter(this, R.layout.list_drawer_row_item, dataObjects);//add name of your layout } 

    5) Jetzt im Adapter kannst du es so umsetzen

    Public class DrawerListAdapter erweitert ArrayAdapter {

     private Context mContext; private ArrayList<DrawerItems> mDataObjects; private int layout; public DrawerListAdapter(Context context, int resource, ArrayList<DrawerItems> dataObjects) { super(context, resource, dataObjects); mContext = context; mDataObjects = dataObjects; layout = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(layout, parent, false); holder.txtDrawerListItem = (TextView) convertView .findViewById(R.id.txt_drawer_item_name); holder.imgDrawerListIcon = (ImageView) convertView .findViewById(R.id.img_drawer_item_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final DrawerItems dataObj = mDataObjects.get(position); holder.txtDrawerListItem.setText(dataObj.getIcnName()); holder.imgDrawerListIcon.setImageResource(dataObj.getIcnId()); return convertView; } public static class ViewHolder { TextView txtDrawerListItem; ImageView imgDrawerListIcon; } } 

    6) Sie sind alle gesetzt … stellen Sie sicher, dass Sie Ansichten und gemeinsame Sachen initialisiert haben

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.