如何从膨胀的LinearLayout的edittext获取文本

时间:2014-05-23 06:55:02

标签: android android-layout android-edittext layout-inflater

我有一个LinearLayout(比如父母)我正在给另一个LinearLayout(说孩子)充气,其中包含EditText& ImageButton

点击主布局中的按钮,我正在充气儿童布局。当单击ImageButton子布局时,布局将被删除。我没有设置这个问题。

现在,我想在EditText点击“保存”按钮时获取所有ActionBar子布局的文字。

以下是我用来夸大视图的方法。 mainLayout是我的父布局。现在,如何在活动中的任何位置获取所有已添加EditText的文字?

private void addEditView(final LinearLayout mainLayout) {

    LayoutInflater inflater = LayoutInflater.from(this);
    View theInflatedView = inflater.inflate(R.layout.layout_add_phone_number_listview, null);

    //Get the EditText in you xml to set the new id 
    EditText editText = (EditText) theInflatedView.findViewById(R.id.et_pn);
    editText.setId(4000+1);//mainLayout.getChildCount()

    ImageButton remove = (ImageButton) theInflatedView.findViewById(R.id.btn_remove_raw);
    remove.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            mainLayout.removeView((View)v.getParent());
        }
    });  
    //add the view into the LinearLayout (global variable)        
    mainLayout.addView(theInflatedView);
}

我尝试了什么:

LinearLayout ll = (LinearLayout)findViewById(R.id.phone_info);

            int count = ll.getChildCount();
            for(int i =0;i<count;i++)
            {
                Log.e("child count:", "count:" + count + "ID:" + ll.getChildAt(i).getId());
                View vi = ll.getChildAt(i);
                if(vi instanceof EditText)
                {
                    // you got the spinner
                    EditText s = (EditText) findViewById(4000+i);
                    Log.e("Item selected",s.getText().toString());
                }
            }

3 个答案:

答案 0 :(得分:0)

在您的父[{1}}上使用mainLayout方法查找您的孩子线性布局。比它上面找到它的子元素具有相同的逻辑。每个视图都有{child}的findViewById()方法。

答案 1 :(得分:0)

试试这个,

ArrayList<String> edittextValues = new ArrayList<String>();
for(int i = 0; i < mainLayout.getChildCount(); i++){
    View view = (View)mainLayout.getChildAt(i);
    EditText editText = (EditText) view.findViewById(R.id.et_pn);
    edittextValues.add(editText.getText().toString());
}

答案 2 :(得分:0)

您的问题IMO认为您要使用ListView来创建自己的列表,并附加每个View

我建议的解决方案: 将ListViewArrayAdapter一起使用。您将能够访问EditText中每一行的ImageButtonArrayAdapter

修改
根据我们的讨论,由于ListView的回收属性,在添加行后用户输入文本未保存和丢失的问题,您应该自定义ArrayAdapter以保存用户键入的文本。 这可以在您getView的{​​{1}}中完成,如此处所述:https://stackoverflow.com/a/9441210/891479