简体   繁体   中英

Adding views programatically to a relative layout within a scrollview

Please bear with me as I am new to the use of Views and Layouts.

I am trying to create an application in which the user can enter a text field, press a button and have a new text field appear and they can continue adding text fields in this way.

My solution was to have the top level be a scrollview and then have a relative view as a child within that(this way I can then programatically insert more editviews in my code with the OnClick() listener.

I have seen and read a couple of other posts pertaining to relative views but it seems there is still something that I am missing. I have tried

Here is the xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_create_accounts"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nic.mybudget.CreateAccountsActivity">


<RelativeLayout
    android:id="@+id/activity_create_accounts_relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/activity_name"
        android:inputType="textAutoComplete"
        android:layout_alignParentTop="true"
        android:id="@+id/activity_createAccounts_relativeLayout_activityName"/>


    <Button
        android:text="+"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_below="@+id/activity_createAccounts_relativeLayout_activityName"
        android:id="@+id/activity_create_accounts_relativeLayout_activityName_addButton" />

    <Button
        android:text="Save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/activity_create_accounts_relativeLayout_activityName_addButton"
        android:layout_centerHorizontal="true"
        android:id="@+id/activity_create_accounts_relativeLayout_activityName_saveButton" />


</RelativeLayout>

And here is the Code where I try to add new editviews.

public class CreateAccountsActivity extends Activity {

static private final String TAG = "MAIN-Activity";
int numAccounts = 0;
int lastAccountID;

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

    final RelativeLayout Relative = (RelativeLayout) findViewById(R.id.activity_create_accounts_relativeLayout);
    final TextView oldAccount = (TextView) findViewById(R.id.activity_createAccounts_relativeLayout_activityName);
    final TextView newAccount = new TextView(this);

    final Button addNewAccountButton = (Button) findViewById(R.id.activity_create_accounts_relativeLayout_activityName_addButton);
    addNewAccountButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.i(TAG, "addNewAccountOnClick");
            numAccounts = numAccounts+1;
            int newAccountID = oldAccount.getId() + numAccounts;

            RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
            rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            newAccount.setLayoutParams(rlp);
            newAccount.setHint("Hint" );
            newAccount.setId(newAccountID);
            Relative.addView(newAccount);

            RelativeLayout.LayoutParams blp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
            blp.addRule(RelativeLayout.BELOW, newAccountID-1);
            addNewAccountButton.setLayoutParams(blp);
        }
    });
}

}

As you can see what I am trying (and failing) to do is add the new edit view at the top of the page and simply push everything else down the page. What am I getting wrong here with the relative layout?

Any help is appreciated.

First thing View with id activity_createAccounts_relativeLayout_activityName is EditText and you are casting it with TextView so that is wrong cast it to EditText .

And to your actual problem: You are using same EditText instance with variable newAccount and adding it again in relative layout if you want to add one more EditText in relative layout you have to initialise EditText inside onclicklistener. Just add one line newAccount= new EditText(context) in your onclicklistener code before line numAccounts = numAccounts+1;

Happy Coding !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM