1

上にlinearLayoutがあり、後半にscrollViewがあるアクティビティを書いています。scrollView は、実行時に最大 30 個の relativeLayouts を取得できます。これは可能ですか?次のコードを試してみましたが、エラーが発生します。

public void onFocusChange(View v, boolean hasFocus) {
    // TODO Auto-generated method stub
    if(hasFocus==false){
    switch(v.getId()){

    case 6:

        main[no]=new RelativeLayout(this);
        mainParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
        main[no].setLayoutParams(mainParams);
        mainLayout.addView(main[no]);
        svParams=new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        sv.setLayoutParams(svParams);

        items[no]=new EditText(this);
        rates[no]=new EditText(this);
        quants[no]=new EditText(this);

        items[no].setHint("Enter item name");
        rates[no].setHint("Rate");
        quants[no].setHint("Quantity");

        RelativeLayout.LayoutParams etParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams rateParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams quantParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        items[no].setId(id++);
        quantParams.addRule(RelativeLayout.RIGHT_OF, (id-1));
        quants[no].setId(id++);
        pos=id;
        rateParams.addRule(RelativeLayout.RIGHT_OF, (id-1));
        rates[no].setId(id++);          

        etParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

        items[no].setLayoutParams(etParams);
        rates[no].setLayoutParams(rateParams);
        quants[no].setLayoutParams(quantParams);

        rates[no].setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        quants[no].setInputType(InputType.TYPE_CLASS_NUMBER);
        main[no].addView(items[no]);
        main[no].addView(rates[no]);
        main[no].addView(quants[no]);
        quants[no].setOnFocusChangeListener(this);
        sv.addView(main[no]);
        no++;
        break;

各相対レイアウトには、互いに隣接する 3 つの editText が含まれます。

4

3 に答える 3

6

ScrollView は 1 つの子のみを持つことができます。すべての RelativeLayouts を含む LinearLayout を追加し、LinearLayout を ScrollView に追加します。

 <ScrollView ...

     <LinearLayout ...

         <RelativeLayout1 ... />

         <RelativeLayout2 ... />

      </LinearLayout>
  </ScrollView>

しかし、最も簡単な方法は、ビューを再利用する ListView ウィジェットを使用することです。

于 2013-08-02T13:24:50.540 に答える
0

この U には Layout Inflater Like を使用します

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >

<LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/main_layout_id">

    </LinearLayout >

    </ScrollView>

メインビューとして

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:id="@+id/layout_item_id">

    <EditText android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="Hello, this is the inflated text :D"
              android:layout_gravity="center"
              android:gravity="center_horizontal"
              android:id="@+id/text_item_id"/>
   <EditText android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="Hello, this is the inflated text :D"
              android:layout_gravity="center"
              android:gravity="center_horizontal"
              android:id="@+id/text_item_id"/>
  <EditText android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="Hello, this is the inflated text :D"
              android:layout_gravity="center"
              android:gravity="center_horizontal"
              android:id="@+id/text_item_id"/>

</RelativeLayout>

これは 3 つのテキストを含む相対レイアウトで、layout_item.xml として保存します。

そして最後にメインレイアウトで

あなたはそのスイッチケースの後に使用します

    RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.main_layout_id);
//Here u can use for loop or something else to repleat the layout
            View view = getLayoutInflater().inflate(R.layout.layout_item, mainLayout,false);


            mainLayout.addView(view);

それでおしまい !!!!!

于 2013-08-02T13:34:27.750 に答える