0

オフラインで利用できるオンライン ストア アプリケーションを作成しています。したがって、データベースのものと他の多くのもの。

メインの 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);
4

0 に答える 0