2016-12-01 7 views
2

ビューとレイアウトを初めて使用しているので、私に同行してください。スクロールビュー内の相対レイアウトにビューをプログラムで追加する

ユーザーがテキストフィールドを入力し、ボタンを押して新しいテキストフィールドを表示し、このようにテキストフィールドを追加し続けることができるアプリケーションを作成しようとしています。

私のソリューションは、(トップレベルはscrollviewことがあり、その中に子として相対的な見解を持っている私は、その後、プログラムでのOnClick()リスナーに自分のコードでより多くのeditviewsを挿入することができ、このようだった。

私はここで

を試してみました。見たと相対ビューに関連する他の記事のカップルを読んで、私が行方不明です何かがまだあるようですしている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> 

です

ここに新しい編集ビューを追加しようとするコードがあります。

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); 
     } 
    }); 
} 

} 

あなたは私がやろうとしている(と失敗)していますかを見ることができたよう

は、ページの上部に新たに編集ビューを追加して、単純にページダウン、他のすべてをプッシュしています。相対的なレイアウトで私はここで何が間違っていますか?

何か助けていただければ幸いです。

+1

scollview内で相対レイアウトの代わりにlistviewを使用し、リスト内の要素を追加してnotifyDataSetChanged()を作成することができます。または、相対レイアウトの代わりにLinearLayoutを使用します。 –

答えて

3

最初の物件ID:activity_createAccounts_relativeLayout_activityNameEditTextで、それはTextViewでキャストしていますので、間違ってキャストするとEditTextになります。

そして、あなたの実際の問題に

: あなたはonclicklistener内のEditTextを初期化する必要が相対的なレイアウトの1つの以上のEditTextを追加したい場合は、変数 newAccountと同じ EditTextインスタンスを使用し、相対的なレイアウトで再びそれを追加しています。 行の前にonclicklistenerコードに newAccount= new EditText(context)を1行追加するだけです numAccounts = numAccounts+1;

ハッピーコーディング!

関連する問題