Android中的ArrayList问题

时间:2017-03-17 09:58:20

标签: java android arraylist

我正在尝试构建一个将英语翻译成猪拉丁语的应用程序。但在我对其进行条件编码之前,我希望它能够在屏幕上打印我所拥有的内容。它只打印屏幕上的最后一个字。例如,如果我键入这是它键入单词的单词。我猜这是因为我没有使用索引,但我不知道。我是初学程序员,我需要帮助。这是我的Java代码。

package com.example.morna.piglatin;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClickTranslate(View v)
    {
        final String vowels = "aeiouAEIOU";
        EditText inputTranslateText =      (EditText)findViewById(R.id.edEnglishText);
        String t = inputTranslateText.getText().toString();
        List <String> objects = Arrays.asList(t.split("\\s+"));



        for(String object: objects)
        {
            TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
            outputPigLatin.setText(String.valueOf(object));

        }

1 个答案:

答案 0 :(得分:1)

这是因为循环的每次迭代都会将新文本设置为textView,因此旧文本会被循环中的新文本覆盖,而且您在一个循环中多次声明textView循环,它没有意义,也不是最优的,所以它会很慢。 而不是这段代码:

for(String object: objects)
{
    TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
    outputPigLatin.setText(String.valueOf(object));

}

使用这个,将TextView放在外部循环中,并且只在循环外设置一次文本:

TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
String myText = null;
for(String object: objects)
{
    myText += object+", ";

}
outputPigLatin.setText(myText);

如果您要打印很多单词(如数百或数千),将使用StringBuilder类更优化的方法:

TextView outputPigLatin = (TextView)findViewById(R.id.txtPigLatin);
StringBuilder myText = new StringBuilder();
for(String object: objects)
{
    myText.append(object).append(", ");

}
outputPigLatin.setText(myText.toString());