7

I'm stuck trying to add an editText field dynamically under my existing editText fields using a button. Currently pressing the button does nothing. Here is my code:

XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d4cfcd">
tools:context="com.zdowning.decisionmaker.MainActivity">


<LinearLayout
    android:id="@+id/linearLayoutMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:gravity="center"
        android:hint="Enter Your Question Here"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"/>

    <LinearLayout
        android:id="@+id/linearLayoutDecisions"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    <EditText
        android:id="@+id/editText3"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:gravity="center"
        android:hint="Enter Answer #2" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:gravity="center"
        android:hint="Enter Answer #1" />

    <EditText
        android:id="@+id/editText4"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:gravity="center"
        android:hint="Enter Answer #3" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">

        <Button
            android:id="@+id/add_button"
            style="?android:attr/borderlessButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:text="+"
            android:textColor="@android:color/background_light"
            android:textSize="18sp"/>

        <View
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1" />

        <Button
            android:id="@+id/remove_button"
            style="?android:attr/borderlessButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:text="-"
            android:textColor="@android:color/background_light"
            android:textSize="18sp"
            android:layout_margin="10dp"/>
    </LinearLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/button"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:text="DECIDE!"
        android:textColor="@android:color/background_light"
        android:textSize="18sp"
        android:layout_centerInParent="true" />
    </RelativeLayout>

    <TextView
        android:id="@+id/textView7"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="20dp"
        android:textColor="@android:color/black"
        android:textSize="36sp" />

</LinearLayout>

Java:

package com.zdowning.decisionmaker;

import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ScrollView;

import java.lang.*;

import static com.zdowning.decisionmaker.R.layout.activity_main;

public class MainActivity extends AppCompatActivity {
public int numberOfLines = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(activity_main);
    final Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             getAnswer();
        }
    });

    final Button Add_button = (Button) findViewById(R.id.add_button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Add_Line();
        }
    });
}


public void Add_Line() {
    LinearLayout ll = (LinearLayout) 
    findViewById(R.id.linearLayoutDecisions);

    // add edittext
    EditText et = new EditText(this);
    et.setId(numberOfLines + 1);
    ll.addView(et);
    numberOfLines++;
}


public void getAnswer() {
    String[] options = new String[3];

    EditText text = (EditText)findViewById(R.id.editText2);
    options[0] = text.getText().toString();

    text = (EditText)findViewById(R.id.editText3);
    options[1] = text.getText().toString();

    text = (EditText)findViewById(R.id.editText4);
    options[2] = text.getText().toString();

    int number = (int)(Math.random() * 3);
    String answer = options[number];

    TextView answerBox = (TextView)findViewById(R.id.textView7);
    answerBox.setText(answer);
}
}

Any advice would be a huge help as I'm brand new to android studio. Coding what is above took me hours.

2 Answers 2

16

Change your Add_line() method to :

 public void Add_Line() {
    LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayoutDecisions);
    // add edittext
    EditText et = new EditText(this);
    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    et.setLayoutParams(p);
    et.setText("Text");
    et.setId(numberOfLines + 1);
    ll.addView(et);
    numberOfLines++;
}

add the LayoutParams to the Edittext

Sign up to request clarification or add additional context in comments.

3 Comments

@JamaicanMeCode if the answer helps, mark it as correct by clicking the tick sign next to the answer..thnakx
Thanks for the help!
suppose I add control two times at that time how can I get the value of both edit text right now I am just getting the last one value of edit text.
3

This help someone who want to add dynamic TextInputLayout to linear layout.

 LinearLayout linearLayoutSubParent = new LinearLayout(this);
        linearLayoutSubParent.setOrientation(LinearLayout.HORIZONTAL);
        linearLayoutSubParent.setWeightSum(100f); // you can also add more widget by providing weight

        LinearLayout.LayoutParams linearLayoutSubParentParams =
                new LinearLayout.LayoutParams(0,
                        LinearLayout.LayoutParams.WRAP_CONTENT, 100f);
        linearLayoutSubParent.setLayoutParams(linearLayoutSubParentParams);
        linearLayoutSubParent.setPadding(0, 0, 0, 0);

        // Add TextInputLayout to parent layout first
        TextInputLayout textInputLayout = new TextInputLayout(this);
        LinearLayout.LayoutParams textInputLayoutParams = new LinearLayout.LayoutParams(0,
                LinearLayout.LayoutParams.WRAP_CONTENT, 100f);


        textInputLayout.setLayoutParams(textInputLayoutParams);
        textInputLayout.setHintTextAppearance(R.style.TextSizeHint);
        linearLayoutSubParent.addView(textInputLayout);

        // Add EditText control to TextInputLayout
        final EditText editText = new EditText(this);
        LinearLayout.LayoutParams editTextParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        editTextParams.setMargins(0, 10, 0, 0);
        editText.setLayoutParams(editTextParams);

        editText.setTextSize(TypedValue.COMPLEX_UNIT_PX,
                getResources().getDimension(R.dimen.text_size));
        editText.setHint("Enter value");
        editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);
        editText.setEnabled(false);

        textInputLayout.addView(editText, editTextParams);


        linearLayoutParent.addView(linearLayoutSubParent);

 <style name="TextSizeHint" parent="TextAppearance.Design.Hint">
        <item name="android:textSize">12dp</item>
 </style>

 <dimen name="text_size">20dp</dimen>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.