如何将来自 TextViews 中动态创建的 EditTexts 的用户输入显示到另一个活动中?

Posted

技术标签:

【中文标题】如何将来自 TextViews 中动态创建的 EditTexts 的用户输入显示到另一个活动中?【英文标题】:How to show user input from dynamic created EditTexts in TextViews into another activity? 【发布时间】:2020-11-01 03:04:52 【问题描述】:

在主要活动中,我有一个按钮,每次用户单击此按钮时,onClick 方法都会创建 EditText。我想将每个EditTextTextView 的用户输入传递到另一个活动中。但是TextView 仅显示来自最后EditText 的用户输入。我的代码可能看起来很奇怪,因为我试图自己解决问题。如何显示来自每个创建的 EditText 的用户输入?我是编程新手。提前谢谢你。

Java 代码

编辑文本代码

int i=1;
int numberOfCreated = 2;
public void buttonCreate(View view)     // button onClick method
    for(i=1;i<numberOfCreated;i++)
        LinearLayout createdEditText1Layout=findViewById(R.id.createdEditText1Layout);
        editText1 = new EditText(this);
        LinearLayout.LayoutParams paramsForEditText1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        editText1.setLayoutParams(paramsForEditText1);
        editText1.setInputType(InputType.TYPE_CLASS_TEXT);
        editText1.setHint(R.string.editText1Hint);
        editText1.setTextSize(16);
        createdEditText1Layout.addView(editText1);
    

意图将字符串传递给第二个活动

    public void openResult() 
    String productName = editText1.getText().toString();
    Intent intent2 = new Intent(this, ResultActivity.class);
    intent2.putExtra("product", productName);
    startActivity(intent2);


public  void buttonResultClick(View view)
    openResult();

第二次活动

    int i=1;
    int numberOfButtons = 2;
    for(i=1;i<numberOfButtons;i++) 
        LinearLayout layoutForProductName = findViewById(R.id.layoutForProductName);
        TextView productNameTextView = new TextView(this);
        LinearLayout.LayoutParams layoutParamsForProductNameTextView = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        productNameTextView.setLayoutParams(layoutParamsForProductNameTextView);
        productNameTextView.setTextSize(40);
        String productName = getIntent().getStringExtra("product");
        productNameTextView.setText(productName);
        layoutForProductName.addView(productNameTextView);
    

【问题讨论】:

【参考方案1】:

据我所知,因为您只添加了一个String productName

您可以通过传递一个字符串数组 aka String[] 来解决这个问题

    public void openResult() 
    ArrayList<String> productNames = new ArrayList<String>();
    for(int y=0; y < createdEditText1Layout.getChildCount(); y++)
    
        if((View)layout.getChildAt(y) instanceof TextView)
            String productName = editText1.getText().toString();
            productNames.add(productName);
        
    
    
    Intent intent2 = new Intent(this, ResultActivity.class);
    intent2.putStringArrayListExtra("product", productNames);
    startActivity(intent2);

然后在第二个活动中你会回忆起来

int i=1;
int numberOfButtons = 2;
for(i=1;i<numberOfButtons;i++) 
    LinearLayout layoutForProductName = findViewById(R.id.layoutForProductName);
    TextView productNameTextView = new TextView(this);
    LinearLayout.LayoutParams layoutParamsForProductNameTextView = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    productNameTextView.setLayoutParams(layoutParamsForProductNameTextView);
    productNameTextView.setTextSize(40);
    String productName = getIntent().getExtras().getStringArrayList("product").get(i);
    productNameTextView.setText(productName);
    layoutForProductName.addView(productNameTextView);

【讨论】:

for(View view: createdEditText1Layout.getChildCount()) 显示错误 foreach 不适用于 int 类型 一开始我没有注意到,但在第二个活动中,String productName = getIntent().getStringArrayList("product").get(i); 的错误也是 Cannot resolve method getStringArrayList in Intent @Max 已修复,我错过了 .getExtras() 道歉 我不知道为什么,但它只显示来自最后一个 EditText 的输入。无论如何,谢谢你的帮助。

以上是关于如何将来自 TextViews 中动态创建的 EditTexts 的用户输入显示到另一个活动中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中创建可变数量的textviews

如何将选定的对话框值设置为片段中的 TextViews [重复]

如何将两个 TextViews 定位在 ListView 中彼此相邻,但至少有一定的差距

如何使用CursorAdapter将Filter设置为ListView?

如何使用 CursorAdapter 将 Filter 设置为 ListView?

将 Textviews 添加到 ListView 中存在的 ViewPager 但 textviews 不可见