22

I am new in Android development and facing a problem with managing Android resources. I want to create a listView with an ImageView and a TextView.

Following is my implementation which works fine, but actually I wanted to use arrays which I created before like this:

int[] img = getResources().getIntArray(R.Array.img);
package com.simplelistviewwithlistactivity;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;

public class ListActivityS extends ListActivity {
    int[] img = { R.drawable.r1, R.drawable.r2, R.drawable.skycubemap1,
            R.drawable.skycubemap1, R.drawable.skycubemap2,
            R.drawable.skycubemap3, R.drawable.skycubemap4,
            R.drawable.skycubemap5 };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getListView().setDividerHeight(2);
        getListView().setAdapter(new BindDataAdapter(this, img, item));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(item[position] + " is clicked.");
        builder.setPositiveButton("OK", null);
        builder.show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_list, menu);
        return true;
    }

    private String item[] = { "This is list Item1", "This is list Item2",
            "This is list Item3", "This is list Item4", "This is list Item5",
            "This is list Item6", "This is list Item8", "This is list Item8"
sourav.bh
  • 467
  • 1
  • 7
  • 20
Jannis Gasmi
  • 221
  • 1
  • 2
  • 3
  • You can use colors in an array by following this example: http://stackoverflow.com/a/17584066/560600 – Sky Kelsey Jul 11 '13 at 02:24
  • Hi Jannis, did you find any of the given answers useful to solve your problem? If so, please consider marking the answer accepted. your small action will help others to find the solution to a similar problem. – sourav.bh Jan 11 '19 at 12:29

2 Answers2

51

Create an XML like below and put it in res/values/arrays.xml

<?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>

Then use code like this:

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);

Source: http://developer.android.com/guide/topics/resources/more-resources.html

Ahmad
  • 69,608
  • 17
  • 111
  • 137
Fraggle
  • 8,607
  • 7
  • 54
  • 86
18

You can use resources from res/values/arrays.xml.

For drawables

<integer-array name="your_images">
    <item>@drawable/ic_active_image</item>
    <item>@drawable/ic_visited_image</item>
</integer-array>

val position = 1 // Position in array.
val drawables = resources.obtainTypedArray(R.array.your_images)
val drawable = drawables.getResourceId(position, -1)
image.setImageResource(drawable)
drawables.recycle()

For colors

<array name="your_colors">
    <item>#365374</item>
    <item>#00B9FF</item>
</array>

val position = 1
val colors = resources.obtainTypedArray(R.array.your_colors)
val color = colors.getColor(position, -1)
title.setTextColor(color)
colors.recycle()

For strings

<string-array name="your_strings">
    <item>Active</item>
    <item>Visited</item>
</string-array>

val position = 1
val strings = resources.getStringArray(R.array.your_strings)
title.text = strings[position]

Plurals:

<plurals name="proposal_plurals">
    <item quantity="zero">No proposals</item>
    <item quantity="one">%1$d proposal</item>
    <item quantity="two">%1$d proposals</item>
    <item quantity="few">%1$d proposals</item>
    <item quantity="many">%1$d proposals</item>
    <item quantity="other">%1$d proposals</item>
</plurals>

val count = 117
val proposals = count.takeIf { it != 0 }?.let {
    resources.getQuantityString(R.plurals.proposal_plurals, it, it)
} ?: "No proposals"
CoolMind
  • 26,736
  • 15
  • 188
  • 224