我将视图膨胀了 5 次,膨胀的视图有一个 EditText,现在我在屏幕上有 5 个 EditText,如何从这些 EditTexts 中获取文本

Posted

技术标签:

【中文标题】我将视图膨胀了 5 次,膨胀的视图有一个 EditText,现在我在屏幕上有 5 个 EditText,如何从这些 EditTexts 中获取文本【英文标题】:I inflated a view 5 times, the view which was inflated had a EditText, now i have 5 EditText on the screen, how to get the text from those EditTexts 【发布时间】:2021-04-29 04:31:31 【问题描述】:

public class MainActivity extends AppCompatActivity 



    EditText EditText1,EditText2,EditText3,EditText4;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        EditText1 = findViewById(R.id.edittext);
        EditText2 = findViewById(R.id.edittext);
        EditText3 = findViewById(R.id.edittext);
        EditText4 = findViewById(R.id.edittext);


        addChildLayout();
        addChildLayout();
        addChildLayout();
        addChildLayout();
    

    public void addChildLayout()

        LayoutInflater layoutInfralte=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       
        LinearLayout linearLayout=(LinearLayout)findViewById(R.id.infolayout);
      
        View view=layoutInfralte.inflate(R.layout.activity_main_layout, null);
        
        linearLayout.addView(view);

    

如何从所有四个视图中选择 EditText 并显示它们,有什么想法吗?我可以在这里做什么?

我想从 4 个 EditText 中的每一个中获取数据

【问题讨论】:

修正了4次,我的手指滑了,我没注意到 添加你的activity_main_layout.xml 【参考方案1】:
public class MainActivity extends AppCompatActivity 



    EditText EditText1,EditText2,EditText3,EditText4;
List<EditText> list=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        EditText1 = findViewById(R.id.edittext);
        EditText2 = findViewById(R.id.edittext);
        EditText3 = findViewById(R.id.edittext);
        EditText4 = findViewById(R.id.edittext);


        addChildLayout();
        addChildLayout();
        addChildLayout();
        addChildLayout();
    

    public void addChildLayout()

        LayoutInflater layoutInfralte=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       
        LinearLayout linearLayout=(LinearLayout)findViewById(R.id.infolayout);
      
        View view=layoutInfralte.inflate(R.layout.activity_main_layout, null);
EditText inflatededitText=(EditText)view.findViewById(R.id.youredittextid);
list.add(inflatededitText);
        
        linearLayout.addView(view);

    

现在您可以获得如下所示的任何编辑文本

list.get(0).getText.toString

这里0是edittext的位置

如果你需要所有的edittext值,那么就使用这样的for循环

for(int i=0;i<list.length;i++)
 Log.d("value","list.get(i).getText.toString");

【讨论】:

【参考方案2】:

在每个 editText 引用上使用 .getText()

【讨论】:

xml 中只有 1 个 EditText,它只有 1 个 id,EditText1 = findViewById(R.id.edittext) 这是我们选择它们的方法 我如何选择其他 3 个膨胀的 Edittext,它们有相同的id 您应该在 xml 中有 4 个编辑文本才能正常工作。如果您想以编程方式膨胀它们,请确保为它们分配正确的 id,以便使用 findViewById 获得参考

以上是关于我将视图膨胀了 5 次,膨胀的视图有一个 EditText,现在我在屏幕上有 5 个 EditText,如何从这些 EditTexts 中获取文本的主要内容,如果未能解决你的问题,请参考以下文章

在首选项设置中膨胀布局

为膨胀的布局设置视图的可见性消失

循环中的多个膨胀视图

无法在 Android 中的 XML 中设置膨胀视图的布局宽度、高度和重量

膨胀内部类视图时出错

膨胀相对布局时出错