我正在创建一个有问题的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();

        }


    }


因为选项数量有限,所以我可以这样做。如果在编译时不知道选项的总数,那么best and most efficient完成此任务的可能方法是什么?

另外,我正在动态添加EditTexts,如下所示。

    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的类。

在您的main方法中,您遍历一个循环,创建一个视图并将其添加到控制器中。

如果您不在循环中,则可以访问所需的视图:

controller.getViewByName("Option3");


这将是控制器中的一种方法,该方法将查找具有该标识符的视图。

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


您需要在控制器中创建自己的自定义方法,并分配其ID和创建方法,以便可以通过ID获取所需的视图。我相信在这种情况下,用于存储结构的HashMap是理想的。

这是否回答你的问题?

编辑:那是一个简单的例子,但没有做for循环。因为您不知道有多少个视图。

我将使用无限的while循环来获取视图,当它返回为null时,您会退出while循环,并且将ArrayList或HashMap或Custom Structure填充为视图。

07-26 09:32
查看更多