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;
}
}
To get an an xml String array from resouces, use:
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