1

私が取り組んでいる Android プロジェクトがあります。私はAndroid開発にかなり慣れていないので、テーブルレイアウトの作成に取り組んでいるMainActivity.javaファイルにいくつかのコードがありますが、現在のコードでは、そのリストから1つの項目しか追加できませんActivity.java クラスを使用してこれを変更し、すべての Mcdonalds オブジェクトをプログラムでテーブルにも追加します。MainActivity.java のビューに両方の行を追加するにはどうすればよいですか?

Activity_Main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="@dimen/activity_vertical_margin"
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context=".ShelterActivity" >

 <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content"  android:stretchColumns="0">

   <TableRow 
       android:id="@+id/TableRow01" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content">

     <TextView 
         android:id="@+id/TextView01" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Address"
         android:width="250px"
         android:textStyle="bold"></TextView>
     <TextView 
         android:id="@+id/TextView02" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Distance"
         android:width="250px"
         android:textStyle="bold"></TextView>
     <TextView 
         android:id="@+id/TextView03" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="ETA"
         android:width="250px"
         android:textStyle="bold"></TextView> 
   </TableRow>
 </TableLayout>  
 </LinearLayout>

MainActivity.java

         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_shelter);
         List<McDonalds> mcdList = new ArrayList<McDonalds>();

               ScrollView sv = new ScrollView(this);

                     // get a reference for the TableLayout
                     TableLayout ll = (TableLayout) findViewById(R.id.TableLayout01);

                     HorizontalScrollView hsv = new HorizontalScrollView(this);
               // create a new TableRow
                     TableRow row = new TableRow(this);


         //This will be replaced by a Read Only Stored procedure that gets the List of Shelters
         McDonalds mcdonalds = new McDonalds("720 N Main St, Roswell, NM", 1.08, 8.0);
         mcdList.add(mcdonalds);
         McDonalds mcdonalds1 = new McDonalds("1804 S Main St, Roswell, NM", 2.9, 12.0);
         mcdList.add(mcdonalds1);
         for (McDonalds mcD : mcdList){
              // create a new TextView
                    TextView t = new TextView(this);
                    TextView t1 = new TextView(this);
                    TextView t2 = new TextView(this);
        String mcdAddress = mcD.getAddress();
        String distance = mcD.getDistance().toString();
        String ETA = mcD.getETA().toString();
        t.setText(mcdAddress);
        t1.setText(distance);
        t2.setText(ETA);
        row.addView(t);
        row.addView(t1);
        row.addView(t2);


    }
    // add the TableRow to the TableLayout
    ll.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

}

上記のコードに見られるように、リストには 2 つの項目が必要であり、両方の項目を で追加する方法が必要ですがll.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));、これはエラーをスローします。

4

1 に答える 1

1

あなたはかなり近づいていますが、あなたがしなければならないことは次のとおりです。

  1. xml から TableRow を削除します。
  2. 常にループ内で新しい TableRow を作成します。
  3. すべての TextViews には、によって設定されたレイアウト パラメータが必要ですsetLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))
  4. ループ内でも表のレイアウトに表の行を追加する
  5. テーブルの行幅ごとに MATCH_PARENT の方が良いと思います

それを行うもう1つの方法は、xmlファイルを作成し、その中にtextViewを入れることです。xml を LayoutInflater.from(context).inflate(...) で膨張させ、ID で見つけた 3 つのテキストビューすべてを埋め、この膨張した tableRow を tableLayout に追加します。

于 2013-03-18T19:51:44.560 に答える