java - 如何处理View的动态添加

标签 java android android-view

我正在创建一个有问题的 Android 应用程序,用户可以通过从提供的两个选项中进行选择来回答这些问题。他们还可以选择动态添加更多选项(最多三个)。我像这样将帖子提交到数据库。

public void sendPost(View v){

        String titlePost = etTitlePost.getText().toString().trim();
        String textPost = etTextPost.getText().toString().trim();
        String option1 = etOption1.getText().toString().trim();
        String option2 = etOption2.getText().toString().trim();

        String option3 = null, option4 = null, option5 = null;

        if(findViewById(R.id.etOption3)!=null){
            EditText etOption3 = (EditText)findViewById(R.id.etOption3);
            option3 = etOption3.getText().toString().trim();
        }

        if(findViewById(R.id.etOption4)!=null){
            EditText etOption4 = (EditText)findViewById(R.id.etOption4);
            option4 = etOption4.getText().toString().trim();
        }

        if(findViewById(R.id.etOption5)!=null){
            EditText etOption5 = (EditText)findViewById(R.id.etOption5);
            option5 = etOption5.getText().toString().trim();
        }

        if(!titlePost.isEmpty() && !textPost.isEmpty() && !option1.isEmpty() && !option2.isEmpty()){

            if( option3 !=null && !option3.isEmpty()){
                if( option4 !=null && !option4.isEmpty()){
                    if( option5 !=null && !option5.isEmpty()){
                        submitPost(titlePost, textPost, option1, option2, option3, option4, option5);
                    }
                    else{
                        submitPost(titlePost, textPost, option1, option2, option3, option4);

                    }
                }
                else {
                    submitPost(titlePost, textPost, option1, option2, option3);

                }
            }
            else {
                submitPost(titlePost, textPost, option1, option2);
            }
        }

        else{

            Toast.makeText(this, "Please fill everything!", Toast.LENGTH_SHORT).show();

        }


    }

我可以这样做,因为选项的数量有限。如果编译时不知道选项总数,那么完成此任务的最佳且最有效可能的方法是什么?

此外,我还动态添加 EditText,如下所示。

    int o=3;
    l = (LinearLayout) findViewById(R.id.layout1);

public void addOption(View v){


        params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

            if(o<6){
                etNewOption = new EditText(this);
                etNewOption.setId(o);     
                l.addView(etNewOption, o+1, params);
            }

如何将它们的 id 设置为某些字符串?

最佳答案

我将创建一个名为 View 的类,然后创建另一个名为 Controller 的类。

在主方法中,您迭代循环,创建 View 并将其添加到 Controller 。

当您脱离循环时,您可以访问所需的 View :

controller.getViewByName("Option3");

这将是 Controller 中的一个方法,它将查找具有该标识符的 View 。

Controller c = new Controller();
for (i = 0; i < amountOfViews; i++)
{
  //some work
  View v = New View(...);
  c.add(v);
}

您需要在 Controller 中创建自己的自定义方法并分配它们的 id 和创建方法,以便您可以通过 id 获取所需的 View 。我相信在这种情况下,存储结构的 HashMap 是理想的选择。

这能回答你的问题吗?

编辑:这是一个简单的示例,但不是执行 for 循环。因为你不知道自己有多少浏览量。

我会使用无限 while 循环来获取 View ,当它返回为 null 时,您将脱离 while 循环,并且您的 ArrayList 或 HashMap 或自定义结构填充了 View 。

关于java - 如何处理View的动态添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708387/

相关文章:

java - 如何防止hadoop流关闭?

java - 更改 REST API 响应中的字段名称

java - 如何在 Graphics 中成功使用 Thread.sleep() 方法?

java - 我可以让 Gradle 只引入所需的依赖项吗?

android - 如何获取用户指纹进行身份验证?

android - 从服务android获取窗口显示

android - 如何使用 id 在 vi​​ews 对象中设置多个标签?

java - Controller 的 POST 参数数量不准确

android - 当应用程序更新时,FCM 是否更新注册 ID

android - 从 iOS 切换到 Android dev - 我应该尝试扩展 Activity/ListActivity 吗?