Java Android Studio如何创建具有多个字符串的edittext?

Java Android Studio如何创建具有多个字符串的edittext?,java,android,Java,Android,我想用edittext创建这样一个视图。我必须创建edittext和输入字符串中的字符一样多 我以前在activity_main.xml文件中定义了linerLayout。然后我在其中创建了edittext。我最后的看法如下 我的代码如下 public void init() { question = new ArrayList<>(); question.add("hello"); question.add("heyo&q

我想用edittext创建这样一个视图。我必须创建edittext和输入字符串中的字符一样多

我以前在activity_main.xml文件中定义了linerLayout。然后我在其中创建了edittext。我最后的看法如下

我的代码如下

public void init() {

    question = new ArrayList<>();
    question.add("hello");
    question.add("heyo");
    question.add("Everyone");

    final ArrayList<EditText>[] array_edit_text = new ArrayList[question.size()];

    LinearLayout linearLayout = findViewById(R.id.game_questions_relative_layout);


    for (int j = 0; j < question.size(); j++) {

        array_edit_text[j] = new ArrayList<>();

        LinearLayout linearLayout2 = new LinearLayout(this);
        LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutParams2.setMargins(10, 20, 10, 20);

        for (int i = 0; i < question.get(j).length(); i++) {

            LinearLayout linearLayout3 = new LinearLayout(this);

            linearLayout3.setOrientation(LinearLayout.HORIZONTAL);
            linearLayout3.setGravity(Gravity.CENTER);
            LinearLayout.LayoutParams layoutParams3 = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            EditText editText = new EditText(this);
            editText.setText("    ");
            editText.setBackgroundColor(Color.TRANSPARENT);
            array_edit_text[j].add(editText);
            linearLayout3.setBackgroundResource(R.drawable.grey_background_5dp);
            linearLayout3.addView(editText, layoutParams3);

            linearLayout2.setGravity(Gravity.CENTER);
            linearLayout2.addView(linearLayout3, layoutParams2);
        }
        linearLayout.addView(linearLayout2);
    }
}
public void init(){
问题=新的ArrayList();
问题。加上(“你好”);
问题。添加(“heyo”);
问题。添加(“所有人”);
最终ArrayList[]数组_编辑_文本=新的ArrayList[question.size()];
LinearLayout LinearLayout=findViewById(R.id.game\u questions\u relative\u layout);
对于(int j=0;j
但我的问题是我不能在这些文本之间切换。输入字符后,我必须切换到另一个字符。或者单击“删除”按钮应切换到上一个按钮


你能帮我吗?我不能推进这个计划。从现在开始谢谢您…

您可以通过使用文本观察者类来实现这一点,然后在TextWatcher的OnTextChanged()方法中将焦点设置在下一个EditText上

在您的情况下,可以尝试以下代码:-


editText.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start,int before, int count) 
    {
        if(//some condition) //if some condition focus the next edit text
        {
            array_edit_text[j+1].requestFocus();
        }


         if(//some condition) //if some other condition focus the previousedit text
        {
            array_edit_text[j-1].requestFocus();
        }
    }
    public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
                // TODO Auto-generated method stub

    }

    public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    }

});
你试过使用吗?您可以使用以下代码

private TextWatcher mTextWatcher = new TextWatcher() {
    @Override
    public void afterTextChanged(Editable editable) {
        // setFocus to the next Edittext
        nextEditText.requestFocus();
    }
};
然后可以将TextWatcher与editText关联

editText.addTextChangedListener(mTextWatcher);

阅读更多内容:

很抱歉,很遗憾,我必须将“I”和“j”变量定义为“final”,很遗憾,我无法访问下一个edittex。您可以将I和j复制到循环中的final变量中。我不明白你评论的第二部分。不管是哪种方式,也许您需要以某种方式重构代码以使其正常工作,但我的回答只是向您展示了如何在EditText之间更改焦点,只要其中一个文本发生更改。你如何精确地实现它,你使用的逻辑也取决于你自己,如果在你创建编辑文本的过程中这样做,考虑简单地在你第一次完成之后,当所有编辑文本都已在ArrayList中创建时--file:///tmp/Spectacle.YRvPtK/Screenshot_20200831_220300.png --这就是我想告诉你的。我必须将其定义为“最终”才能使用这些值。但是我无法更改“final”变量,因此无法访问下一个edittext我尝试了此用法,但是当我返回所有edittext时,当我为每个edittext创建此方法时,我无法访问下一个edittex。我必须定义循环值​​作为“最终的”。