1

I created an app which displays a list of fruit and when selected the new activity display the image and the name of the fruit. However I need to localize the app and my strings are stored in a string array in Java as opposed to in the strings.xml Values folder.

Is there a simple a way to read in xml strings into the array and will it work if local settings are switched to french. (values-fr).

package com.example.favouritefruit;
import android.os.Bundle;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class FavouriteFruit extends ListActivity 
{
    //string array containing types of fruit
      static final String[] FRUIT = new String[]
            {
                "Apple", "Orange", "Banana"
            };

      static final String SELECTEDFRUIT = "com.example.favouritefruit.SELECTEDFRUIT";

      @Override//onCreate Method
        public void onCreate(Bundle savedInstanceState) 
            {
            super.onCreate(savedInstanceState);

            /*Use a java layout as opposed to an xml layout.
            setListAdapter takes a list adapter or an array adapter
            Creates a new class ArrayAdapter Class*/
            setListAdapter(new ListArrayAdapter(this, FRUIT));
            }

        //Creates an intent to move to a new activity

      public void onListItemClick(ListView l, View v, int position, long id)
      {
          super.onListItemClick(l, v, position, id);


        try {
            Class test = Class.forName("com.example.favouritefruit.AppleActivity");
            Intent intent = new Intent(FavouriteFruit.this, test);

            TextView textView = (TextView) v.findViewById(R.id.label);
            String fruit = textView.getText().toString();
            ImageView fruitImage = (ImageView)v.findViewById(R.id.logo);

            //intent.putExtra("IMAGE",""+);
            intent.putExtra(SELECTEDFRUIT,fruit);
            startActivity(intent);
            }   catch (ClassNotFoundException e) {
            e.printStackTrace();}

      }

}

class ListArrayAdapter extends ArrayAdapter<String> 
{
        //Context allows the retrieval of resources such as layout
        private final Context context;
        private final String[] fruit;

        //create the ArrayAdpater
        public ListArrayAdapter(Context context, String[] fruit) 
        {
        super(context, R.layout.activity_favourite_fruit, fruit);
        this.context = context;
        this.fruit = fruit;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //inflater  dynamically loads the layouts
        View rowView = inflater.inflate(R.layout.activity_favourite_fruit, parent, false);
        //get the textView
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        //get the ImageView
        ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
        //set the text to the string values based on position
        textView.setText(fruit[position]);

        // Change item based on its position in the string array
        String fruitPosition = fruit[position];

        System.out.println(fruitPosition); 
        //assign the image to to the relevant fruit
        if (fruitPosition.equals("Apple"))
            {
            imageView.setImageResource(R.drawable.image_apple);
            } 
        else if (fruitPosition.equals("Orange")) 
            {
            imageView.setImageResource(R.drawable.image_apple);
            } 
        else if (fruitPosition.equals("Banana"))
            {
            imageView.setImageResource(R.drawable.image_apple);
            }

        //return the layout
        return rowView;
        }

}

1 Answer 1

1

To get an an xml String array from resouces, use:

getResources().getStringArray(R.array.string_array_name);

Yes, if you have localized versions of the resource, it will automatically load the appropriate one based on the user's device settings. You can make localized xml resources of the individual strings, and use a single string array resource that references the string resources by id/name

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for the solution,it was a lot easier than I had expected.
This is quite old, but can someone show this last bit about referencing a bunch of string resources from a single array resource in code?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.