为什么for循环在setText方法中不起作用

时间:2019-04-10 08:07:12

标签: java android

我正在尝试创建一个重复文本应用程序。因此,我使用for循环重复文本并将其显示在textview中。

当我按下一个按钮时,我希望它在循环运行时生成文本多次。

这是我的代码:

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

    enterText = findViewById(R.id.editText);
    repeatText = findViewById(R.id.repeatTime);

    genTxt = findViewById(R.id.genText);

    genrate = findViewById(R.id.generate);
    reset = findViewById(R.id.reset);

    copy = findViewById(R.id.copyButton);
    share = findViewById(R.id.shareButton);

    genrate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Storing text in Gen Text Area
            String txt = enterText.getText().toString().trim();

            //Storing Repeat value
            String repeats = repeatText.getText().toString().trim();
            int repealVal = Integer.parseInt(repeats);

            for(int i=1;i<=repealVal;i++){
                genTxt.setText(txt);
                Log.d("tets","loop "+i+txt);
            }
        }
    });
}

public void reset(View view){
    enterText.setText("");
    repeatText.setText("");
    genTxt.setText("");
}

运行它时,我只能在textview中获得一次文本。

2 个答案:

答案 0 :(得分:4)

尝试将您的onClick方法更改为以下内容:

genrate.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    //Storing text in Gen Text Area
    String txt = enterText.getText().toString().trim();

    //Storing Repeat value
    String repeats = repeatText.getText().toString().trim();
    int repealVal = Integer.parseInt(repeats);

    for(int i=1;i<=repealVal;i++){
      genTxt.setText(genTxt.getText() + txt);
      Log.d("tets","loop "+i+txt);
    }
  }
});

请注意,在循环中,您仅切换文本,而不添加文本。

要进一步优化解决方案,您应该考虑使用。append()而不是.setText()

答案 1 :(得分:0)

这里您一次又一次将文本设置为相同的TextView。 如果要动态生成多个TextView,可以尝试以下解决方案。

在您要添加文本的xml中的根布局中提供一个ID。在这里,我正在使用LinearLayout。如下所示将其添加到您的代码中:

LinearLayout linearLayout = findViewById(R.id.ll) //ll is the id of LinearLayout

然后将其添加到您的onclick

TextView txtView;  
for(int i = 1; i <= repealVal; i++) {
    txtView = new TextView(MainActivity.this);
    txtView.setText(txt);
    linearLayout.addView(txtView);
}