通过线性布局动态添加编辑文本获取文本

时间:2017-02-18 07:51:44

标签: java android android-edittext android-linearlayout

我添加了具有编辑字段的动态线性布局,现在我想从这些编辑字段中获取文本。这是我动态添加布局的代码

linearLayoutForm = (LinearLayout) findViewById(R.id.linearLayoutForm);
        btnAdd.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                final LinearLayout newView = (LinearLayout)getLayoutInflater().inflate(R.layout.single_skill_row, null);
                newView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                ImageButton btnRemove = (ImageButton) newView.findViewById(R.id.btnRemove);
                btnRemove.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        linearLayoutForm.removeView(newView);
                    }
                });
                linearLayoutForm.addView(newView,0);
            }
        });

我试图用这段代码获取文本,但我得到了空指针异常。

register_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            LinearLayout et2=(LinearLayout) linearLayoutForm.getChildAt(linearLayoutForm.getChildCount());
            EditText e = (EditText) et2.getChildAt(et2.getChildCount());
            String s=e.getText().toString();
});

这是single_skill_row的XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rowdetail"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/editDescricao"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.62"
        android:ems="10"
        android:inputType="text"
        android:maxLines="1">
        <!--<requestFocus />-->
    </EditText>

    <ImageButton
        android:id="@+id/btnRemove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/btn_remove"
        android:src="@drawable/ic_remove_black_18dp" />
</LinearLayout>

3 个答案:

答案 0 :(得分:0)

您可以使用findViewById

实现这一目标
register_btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        LinearLayout et2=(LinearLayout) linearLayoutForm.getChildAt(linearLayoutForm.getChildCount());
        EditText e = (EditText) et2.findViewById(R.id.editDescricao);
        String s=e.getText().toString();
});

答案 1 :(得分:0)

你可以这样做:

在课堂上首先添加一个字段:

...
EditText myEditText;
...

然后在添加linearLayout之后,将editText存储在字段中,如下所示:

...
final LinearLayout newView = (LinearLayout)getLayoutInflater().inflate(R.layout.single_skill_row, null);
myEditText = newView.findViewById(R.id.editDescricao);
...

之后在按钮的onClick回调中你可以得到它的文字:

register_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        String text = myEditText.getText().toString();
});

答案 2 :(得分:0)

你可以简单地这样做:

首先创建一个特殊的行布局,以便以编程方式轻松添加它,然后以这种方式工作:

    private LinearLayout parentLinearLayout;
    private List<View> rowViewList = new ArrayList<View>();


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_meeting);

        parentLinearLayout = findViewById(R.id.parent_linear_layout);

    }

/** 在这里,您在按钮上添加 onClick ="onAddField",直接在您的布局中 在这个方法中发生的事情是你膨胀了你的 LinearLayout,你添加了你之前用 id 创建的特殊行布局,最后,你将这个新视图添加到 rowViewList(列表)上,然后将此视图添加到你声明的 LinearLayout 中开头*/

    public void onAddField(View v) {
        LayoutInflater inflater = (LayoutInflater) 
        getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(R.layout.your_row_you_want_to_add, null);
        rowViewList.add(rowView);
        parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
    }

/** 在这里,您在布局中添加按钮 onClick="getText" 创建您的视图视图、您的 Edittext 和您的字符串,它将获取所有文本,您只需要遍历您之前创建的列表 rowViewList*/

public void getText(View view) {
    View viewRow;
    EditText editText;
    String allEditText = "";
    for (int i = 0; i<rowViewList.size(); i++){
        viewRow = rowViewList.get(i);
        editText = viewRow.findViewById(R.id.mail_edit_text);
        allEditText = allEditText + ", " + editText.getText().toString();
    }
}

希望对你有帮助

相关问题