1

果物のリストを表示するアプリを作成し、新しいアクティビティを選択すると、果物の画像と名前が表示されます。ただし、アプリをローカライズする必要があり、文字列は、strings.xml Values フォルダーではなく、Java の文字列配列に格納されます。

xml 文字列を配列に読み込む簡単な方法はありますか?ローカル設定がフランス語に切り替えられた場合に機能しますか? (値-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;
        }

}
4

1 に答える 1

1

リソースから xml 文字列配列を取得するには、次を使用します。

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

はい、ローカライズされたバージョンのリソースがある場合、ユーザーのデバイス設定に基づいて適切なリソースが自動的に読み込まれます。個々の文字列のローカライズされた xml リソースを作成し、id/name で文字列リソースを参照する単一の文字列配列リソースを使用できます。

于 2012-10-16T16:31:28.727 に答える