0

選択したスポーツの1週間分の予定されたゲームを表示するページがあります。選択したスポーツと週は、ページの先頭で開かれるXMLファイル内に保存されます。次の週のリンクをクリックすると、新しい週の日付の値がこのxmlファイルに保存され、ページが再読み込みされます。これで、この次の週のゲームが表示されます。これらのゲームはテーブルレイアウトに表示され、.javaページで必要に応じてプログラムで行を作成します。これはコードの簡略化されたサンプルです。

TableLayout tlGames = (TableLayout)findViewById(R.id.table_games);

for (int i = 0; i < gameCount; i++) 
{

TableRow trGameHomeTeam = new TableRow(this);

TextView tvHomeTeamName = new TextView(this);

tvHomeTeamName.setText("Home Team Name Here");

tvHomeTeamName.setLayoutParams(new LayoutParam (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

TextView tvHomeTeamScore = new TextView(this);

tvHomeTeamScore.setText("Home Team Score Here");

tvHomeTeamScore.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

trGameHomeTeam.addView(tvHomeTeamName);

trGameHomeTeam.addView(tvHomeTeamScore);

tlGames.addView(trGameHomeTeam,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

}           

最初にアプリを実行すると、現在の日付のゲームが正しく一覧表示されます。次に、次の週のリンクをクリックすると、このページが再ロードされ、この新しい週のゲームが表示されます。代わりに、「指定された子にはすでに親があります。最初に子の親に対してremoveView()を呼び出す必要があります。」というエラーメッセージが表示されます。「tlGames.removeAllViews();」を追加しました TableLayout tlGames行の直後ですが、これはエラーを修正しませんでした。

私が「addView」を持っていた唯一の場所は、テーブル行またはテーブル行のテキストビューを作成するためのものです。

誰かが私が間違っていることを教えてもらえますか?

ありがとう

4

3 に答える 3

4

私の推測では、今週のゲームを表示するためにページをリロードすると、レイアウト インフレータを使用して詳細レイアウトを膨らませることができますか?

レイアウト インフレータは、このエラーが発生した唯一の場所です。その場合は、false の 3 番目の引数を inflate メソッドに渡します。それ以外の場合は、ビューのルートを膨張させようとするため、この例外がスローされます。あなたに。

すなわち

inflater.inflate(R.layout.profile, container, false);
于 2012-01-26T23:21:24.757 に答える
0

まず、どの行でそのエラーが発生したかを確認する必要があります。またはスタックトレースを入れます。

さて、すでにビューを持っていて、同じビューの場所に別のビューを追加しようとしているという理由だけで、そのエラー メッセージが表示されます。

したがって、別のビューを追加する前に、最初に特定の名前で追加されたビューを削除してください。

元。tl.removeView(ブラブラブラ); 次に、ビューを追加します。

または

ループ条件の特定のビューをロードする場合は、これを試すこともできます。

ループ条件に基づいて実行するように、別の xml を作成します。元。child.xml と言う

次に、ループ条件に基づいてそのレイアウトをメイン レイアウトに追加します。そのループでそのレイアウトのデータにアクセスすることもできます。

私が行ったこのループを見てください。

    for (int i = 0; i<=tempEmployerList.size()-1; i++) {  
            LinearLayout EmpItem = (LinearLayout)LayoutInflater.from        (getApplicationContext()).inflate(R.layout.child, null); 
   // to access with the data use this

    ((TextView)EmpItem.findViewById(R.id.taxcodeTextView)).setText(TAXCODE);


    // Finaly add that loopLayout to your layout to your main layout like this
    myLinearLayout.addView(EmpItem); 
}

私がテストしたので、きっとあなたを助けるでしょう。

そうでない場合は、お知らせください。

または

それでも独自のコードで何かをしたい場合は、この例を理解してください

それはきっとあなたを助けるでしょう。

楽しみ。:))

于 2012-01-27T04:56:21.240 に答える
0

You have corrected already some errors, as I see. Correct two more:

    tvHomeTeamName.setLayoutParams(new TableRow.LayoutParams (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

...

    tvHomeTeamScore.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

With these corrections it runs at me.

于 2012-01-30T14:23:59.500 に答える