Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式生成整个布局+;获取按钮的手柄+;获取文本字段中的文本+;单击存储按钮并在此布局中输入文本_Java_Android_Android Layout - Fatal编程技术网

Java 以编程方式生成整个布局+;获取按钮的手柄+;获取文本字段中的文本+;单击存储按钮并在此布局中输入文本

Java 以编程方式生成整个布局+;获取按钮的手柄+;获取文本字段中的文本+;单击存储按钮并在此布局中输入文本,java,android,android-layout,Java,Android,Android Layout,我遇到了一个大问题。我有一个基于JSON响应编程生成的完整布局。因此json响应主要有三种类型 1) 类型:选择(是/否问题) 2) 类型:textfield(上面有文本视图的编辑文本) 3) 类型:文件(图像视图) 下面是我的自定义EditText类:请注意,我可以使用getter获得句柄 public class CEditText extends LinearLayout { String title; EditText et; public CEditText

我遇到了一个大问题。我有一个基于JSON响应编程生成的完整布局。因此json响应主要有三种类型

1) 类型:选择(是/否问题) 2) 类型:textfield(上面有文本视图的编辑文本) 3) 类型:文件(图像视图)

下面是我的自定义EditText类:请注意,我可以使用getter获得句柄

public class CEditText extends LinearLayout {

    String title;
    EditText et;

    public CEditText(Context context,String title, String number) {
        super(context);
        this.title=title;
        setOrientation(LinearLayout.VERTICAL);
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lp.setMargins(15, 10, 15, 10);
        setLayoutParams(lp);


        TextView t = new TextView(context);
        t.setText(number + "  "+title);
        t.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        addView(t);


        et = new EditText(context);
        final LayoutParams lparams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        lparams.setMargins(25, 0, 0, 0);
        et.setLayoutParams(lparams);
        addView(et);
        // TODO Auto-generated constructor stub
    }

    public EditText getEditText()
    {
        return et;
    }} 
因此,基于解析,我将它们添加到布局中,如下所示:

  if(ques_type.equals("textarea"))
                {
                    CEditText et = new CEditText(this, 
                    ll.addView(et)
responses.add(new Response(ques_type, ques_name,et.getEditText().getText().toString()));
                    }
所以这是完全动态的。根据用户的响应,我必须存储它。如果用户在编辑文本中输入文本,我必须存储它,如果用户选择“选择”问题的是/否,我必须存储该响应。存储响应后,我必须将所有这些信息传递到另一个活动,用户在该活动中查看其反馈。我这样处理,但由于数据不持久,这是一个巨大的失败:

  • 创建一个response.java类,其成员为question、response和id
  • 在使用我的自定义类获得句柄之后,只要用户单击或在上面输入文本,我就使用句柄获得响应。然后我将响应保存在响应对象中,并将其添加到响应的arraylist中,我很快意识到这是不正确的!因为如果我得到一个已创建的自定义视图的句柄并很快执行getText(),我将不会得到任何东西(如上面的代码所示)。它实际上应该是在一个按钮点击事件中,用户在输入所有响应后点击它。因此,为了在一次按钮点击中获得所有这些响应,我需要在按钮点击下有一个句柄/引用,以访问所有这些动态生成的视图,我不知道如何。我非常需要帮助,如果有人能伸出援助之手,我将不胜感激。如果您能告诉我如何将存储的响应传递给其他活动,我将更加感激。先谢谢你

我可能误解了这里的某些内容,但您不能在创建这些CEditText视图时将它们的引用存储在某个列表或数组中吗

然后,当用户单击“提交”(或您称之为“提交”)时,您可以遍历所有这些视图并获取它们的值

如果不想使用列表或数组,则始终可以在所有CEditText视图的父视图上调用getChildAt(int位置)

将其传递给下一个活动的最简单(也可能是最丑陋的)方法是将所有用户生成的字符串放入数组中,并通过intent.puExtra()发送它们

但另一个建议是:您真的需要单独的活动来让用户查看他提交的数据吗?真的有那么大的不同吗?难道你不能重复使用你已有的布局,仅仅改变一些背景等吗


(如果这不是你的意思,请添加更多关于这一切的项目/目的的信息,以便我们可以讨论:)

解决了这个问题……谢谢,伙计……我认为这是这个概念上的巨大变化……但我从这个想法开始……非常感谢。。。!