>  기사  >  Java  >  Android에서 \"지정된 하위 항목에 이미 상위 항목이 있습니다\" 오류가 발생하는 이유는 무엇입니까?

Android에서 \"지정된 하위 항목에 이미 상위 항목이 있습니다\" 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-30 13:22:02549검색

Why Am I Getting the

Android 오류 문제 해결: "지정된 하위 항목에 이미 상위 항목이 있습니다"

레이아웃 간에 자주 전환할 때 "The 지정된 하위에 이미 상위가 있습니다. 먼저 하위의 상위(Android)에서 제거뷰()를 호출해야 합니다." 이는 애플리케이션의 콘텐츠 뷰에 ​​이미 첨부된 레이아웃에 TextView 또는 EditText와 같은 뷰가 추가될 때 발생합니다.

예를 들어, 레이아웃이 자주 생성되고 전환되는 다음 코드를 고려해보세요. :

<code class="java">private void ConsoleWindow() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Create a new layout (LinearLayout).
            LinearLayout layout = new LinearLayout(getApplicationContext());
            layout.setOrientation(LinearLayout.VERTICAL);

            // Add a TextView to the layout.
            layout.addView(tv);

            // Add an EditText to the layout.
            et.setHint("Enter Command");
            layout.addView(et);

            // Set the content view to the new layout.
            setContentView(layout);
        }
    });
}</code>

setContentView() 메서드를 다른 레이아웃으로 두 번 호출하면 문제가 발생합니다. 처음에는 LinearLayout 레이아웃이 콘텐츠 뷰에 ​​처음으로 추가되므로 문제가 없습니다. 그러나 setContentView()에 대한 후속 호출 중에 LinearLayout 레이아웃에는 여전히 해당 하위 요소(TextView 및 EditText)가 포함됩니다. LinearLayout 객체에 이미 상위(콘텐츠 뷰)가 있으므로 이를 다시 추가하면 "지정된 하위에 이미 상위가 있습니다." 오류가 발생합니다.

해결책:

해결책은 콘텐츠 뷰에 ​​두 번째로 추가하기 전에 LinearLayout 레이아웃에서 하위 항목(TextView 및 EditText)을 제거하는 것입니다. 수정된 코드는 다음과 같습니다.

<code class="java">private void ConsoleWindow() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Create a new layout (LinearLayout).
            LinearLayout layout = new LinearLayout(getApplicationContext());
            layout.setOrientation(LinearLayout.VERTICAL);

            // Remove the TextView from its parent (if it has one).
            if (tv.getParent() != null) {
                ((ViewGroup) tv.getParent()).removeView(tv);
            }
            
            // Add the TextView to the layout.
            layout.addView(tv);

            // Remove the EditText from its parent (if it has one).
            if (et.getParent() != null) {
                ((ViewGroup) et.getParent()).removeView(et);
            }
            
            // Add the EditText to the layout.
            et.setHint("Enter Command");
            layout.addView(et);

            // Set the content view to the new layout.
            setContentView(layout);
        }
    });
}</code>

새 LinearLayout 레이아웃에 추가하기 전에 이전 상위에서 하위를 제거하면 해당 하위가 여러 상위에 동시에 연결되지 않도록 하여 "지정된 하위가 이미 상위 항목이 있습니다.' 오류.

위 내용은 Android에서 \"지정된 하위 항목에 이미 상위 항목이 있습니다\" 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.