【问题标题】:gridView - array in strings.xmlgridView - strings.xml 中的数组
【发布时间】:2017-04-23 18:29:09
【问题描述】:

我正在尝试创建一个多语言应用程序,但我的主页是由图像和文本视图组成的 gridView。当我在 Java 中创建一个列表时(像这样):

String textoList[] = {"Visto", "Alojamento", "C.P.F.", "Alimentação", "Carteirinha", "Guia", "Registro", "Informações", "Assistência", "Biblioteca", "Calendário", "Transporte", "INT", "Intérprete", "F.A.Q."};

效果很好。但是我意识到我不应该在 Java 中创建一个列表,而是使用一个已经在 strings.xml 文件中创建的数组,这样我的应用程序就可以被翻译。基本上,我想要这个数组中的文本。我该怎么做?

有人可以帮帮我吗?如果有人想测试它,完整的代码是:

    package br.com.unbparaestrangeiros.unbparaestrangeiros;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

public class MainActivity extends Activity{
    GridView gridView;

    Resources r = getResources();
    String[] textoList = r.getStringArray(R.array.itens);

    //String textoList[] = {"Visto", "Alojamento", "C.P.F.", "Alimentação", "Carteirinha", "Guia", "Registro", "Informações", "Assistência", "Biblioteca", "Calendário", "Transporte", "INT", "Intérprete", "F.A.Q."};

    int textoImagem[] = {R.drawable.visto, R.drawable.alojamento, R.drawable.cpf, R.drawable.alimentacao, R.drawable.carteirinha, R.drawable.guia,  R.drawable.registro, R.drawable.informacoes, R.drawable.assistencia,  R.drawable.biblioteca, R.drawable.calendario, R.drawable.transporte,  R.drawable.informacoes, R.drawable.interprete, R.drawable.perguntas};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inicio);

        gridView = (GridView) findViewById(R.id.gridView);

        GridAdapter adapter = new GridAdapter(MainActivity.this, textoImagem, textoList);

        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    case 0:
                        Intent case0 = new Intent(MainActivity.this, Visto.class);
                        startActivity(case0);
                        break;

                    case 1:
                        Intent case1 = new Intent(MainActivity.this, Alojamento.class);
                        startActivity(case1);
                        break;

                    case 2:
                        Intent case2 = new Intent(MainActivity.this, CPF.class);
                        startActivity(case2);
                        break;

                    case 3:
                        Intent case3 = new Intent(MainActivity.this, Alimentacao.class);
                        startActivity(case3);
                        break;

                    case 4:
                        Intent case4 = new Intent(MainActivity.this, Carteirinha.class);
                        startActivity(case4);
                        break;

                    case 5:
                        Intent case5 = new Intent(MainActivity.this, Guia.class);
                        startActivity(case5);
                        break;

                    case 6:
                        Intent case6 = new Intent(MainActivity.this, Registro.class);
                        startActivity(case6);
                        break;

                    case 7:
                        Intent case7 = new Intent(MainActivity.this, Informacoes.class);
                        startActivity(case7);
                        break;

                    case 8:
                        Intent case8 = new Intent(MainActivity.this, Assistencia.class);
                        startActivity(case8);
                        break;

                    case 9:
                        Intent case9 = new Intent(MainActivity.this, Biblioteca.class);
                        startActivity(case9);
                        break;

                    case 10:
                        Intent case10 = new Intent(MainActivity.this, Calendario.class);
                        startActivity(case10);
                        break;

                    case 11:
                        Intent case11 = new Intent(MainActivity.this, Transporte.class);
                        startActivity(case11);
                        break;

                    case 12:
                        Intent case12 = new Intent(MainActivity.this, Assessoria.class);
                        startActivity(case12);
                        break;

                    case 13:
                        Intent case13 = new Intent(MainActivity.this, Interprete.class);
                        startActivity(case13);
                        break;

                    case 14:
                        Intent case14 = new Intent(MainActivity.this, Perguntas.class);
                        startActivity(case14);
                        break;

                }
            }
        });
    }

}

【问题讨论】:

  • String[] textoList[] = getResources().getStringArray(R.array.itens); 来自 oncreate 中的 strings.xml。请注意,您有 String[] textoList = r.getStringArray(R.array.itens);getResources() 需要上下文。创建活动后,上下文就可用。将代码移入 onCreate
  • 错误是什么
  • “但我意识到我不应该在 Java 中创建一个列表,而应该使用已经在 strings.xml 文件中创建的数组” - String[] textoList 不是 List,你已经在使用直接从资源中获取的字符串数组。

标签: java android gridview


【解决方案1】:

app/src/main/res/values 中创建一个名为array.xml 的新文件(如果尚未存在)。您可以像这样添加字符串:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="itens">
        <item>Visto</item>
        <item>Alojamento</item>
        <!--Add your other words here-->
    </string-array>
</resources>

您可以通过Activity 使用getResources().getStringArray(R.array.itens); 访问它们。

【讨论】:

    【解决方案2】:

    试试这个:

    String[] textoList;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inicio);
    
        textoList = getResources().getStringArray(R.array.itens);
    }
    

    您在strings.xml 中的itens 数组如下:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        ...............
        ......................
        <string-array name="itens">
            <item>Visto</item>
            <item>Alojamento</item>
            <item>C.P.F.</item>
            <item>Alimentação</item>
            <item>Carteirinha</item>
            <item>Guia</item>
            <item>Registro</item>
            ................
            .......................
        </string-array>
    </resources>
    

    希望对你有帮助~

    【讨论】:

    • 如果我的答案看起来有用,那么您可以将其标记为正确答案并投票。在此先感谢:)
    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2013-07-18
    • 2012-02-02
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多