オフラインで利用できるオンライン ストア アプリケーションを作成しています。したがって、データベースのものと他の多くのもの。
メインの xml ファイル (home_screen_categories_products_linear_layout) に LinearLayout があり、これを膨張させて別のファイル (product_details_layout) からレイアウトを追加します。この 2 番目のレイアウト (製品の詳細を表す) には、別の xml ファイル (opinion_layout) から膨らませた製品 (opinionsList) の顧客の意見を含む別の LinearLayout があります。
そしてもちろん、「指定された子にはすでに親があります。最初に子の親で removeView() を呼び出す必要があります。」例外。
以前にこれに遭遇しましたが、問題を回避することができました。ただし、この場合、私はそれを行う方法を考えることができません。
私はこの例外を予期していましたが、うまくいくことを期待して試しました。ここで他の同様の質問を読みましたが、解決策が見つかりませんでした。基本的に、既に別のレイアウトにインフレートされている別のレイアウトのレイアウトをどのようにインフレートしますか? (意味があれば)
以下は、製品の詳細を表示するメソッドのコードです。
LinearLayout parentLayout = (LinearLayout) findViewById(R.id.home_screen_categories_products_linear_layout);
parentLayout.removeAllViews();
View view = layoutInflater.inflate(R.layout.product_details_layout, parentLayout, false);
TextView pretNou = (TextView) view.findViewById(R.id.ProductDetailsNewPrice);
..........................
String userName = c.getString(c.getColumnIndex(KEY_P_USER_NAME));
String userRating = c.getString(c.getColumnIndex(KEY_P_USER_RATING));
String comments = c.getString(c.getColumnIndex(KEY_P_COMMENT));
String commentDate = c.getString(c.getColumnIndex(KEY_P_DATE));
LinearLayout opinionsParentLayout = (LinearLayout) view.findViewById(R.id.opinionsList);
opinionsParentLayout.removeAllViews();
View opinionView = layoutInflater.inflate(R.layout.opinion_layout, parentLayout, false);
if(userName.length()!= 0)
{
StringTokenizer nameSplitter = new StringTokenizer(userName,"{|}");
StringTokenizer userRatingSplitter = new StringTokenizer(userRating,"{|}");
StringTokenizer commentsSplitter = new StringTokenizer(comments,"{|}");
StringTokenizer commentDateSplitter = new StringTokenizer(commentDate,"{|}");
while (nameSplitter.countTokens() >0 )
{
TextView user = (TextView) opinionView.findViewById(R.id.commentUser);
user.setText(nameSplitter.nextToken() + " · " + commentDateSplitter + " Rating:");
ImageView userRatingIV = (ImageView) opinionView.findViewById(R.id.userRating);
switch ( Integer.parseInt(userRatingSplitter.nextToken()) )
{
case 0 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars0)); break;
case 1 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars1)); break;
case 2 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars2)); break;
case 3 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars3)); break;
case 4 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars4)); break;
case 5 : userRatingIV.setImageDrawable(getResources().getDrawable(R.drawable.stars5)); break;
}
TextView commentTV = (TextView) opinionView.findViewById(R.id.commentComment);
commentTV.setText(commentsSplitter.nextToken());
opinionsParentLayout.addView(opinionView);
}
}
parentLayout.addView(view);