-4

重複の可能性:
最初に子の親で removeView() を呼び出します

私のアクティビティは、対応する 3 つのリニア レイアウト内の 3 つの Listview で構成されています。リストビューを切り替えようとすると、エラーが発生します。1つずつ移動すると正常に動作します。これを修正するためのスニペットまたは例を教えてください。ありがとうございます。

私のエラーログは

12-14 15:32:50.017: E/AndroidRuntime(5102): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.ViewGroup.addView(ViewGroup.java:1871)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.ViewGroup.addView(ViewGroup.java:1828)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.ViewGroup.addView(ViewGroup.java:1808)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at com.kk.World.TheWorld.getView(TheWorld.java:629)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at com.kk.World.TheWorld.onClick(TheWorld.java:428)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.View.performClick(View.java:2538)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.view.View$PerformClick.run(View.java:9152)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.os.Handler.handleCallback(Handler.java:587)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.os.Looper.loop(Looper.java:130)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at android.app.ActivityThread.main(ActivityThread.java:3687)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at java.lang.reflect.Method.invokeNative(Native Method)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at java.lang.reflect.Method.invoke(Method.java:507)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
12-14 15:32:50.017: E/AndroidRuntime(5102):     at dalvik.system.NativeStart.main(Native Method)

私の見解は

    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:cacheColorHint="#00000000" />
</LinearLayout>

<LinearLayout
    android:id="@+id/statelayoutStg"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/state_ll"
    android:background="@drawable/mesh"
    android:orientation="vertical"
    android:visibility="invisible" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/transparent"
        android:cacheColorHint="#00000000" />
</LinearLayout>

<LinearLayout
    android:id="@+id/citylayoutStg"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/city_ll"
    android:background="@drawable/mesh"
    android:orientation="vertical"
    android:visibility="invisible" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/transparent"
        android:cacheColorHint="#00000000" />
</LinearLayout>
4

2 に答える 2

3

単一@id/android:listListActivity. そして、それがまさにその理由であるべきです。

3 つの ListView を使用する必要がある場合は、アクティビティを拡張してカスタム アダプターを使用することをお勧めします。同じIDを使用しているため、競合が発生します。

しかし、私の経験からすると、同じ画面に複数の ListView を配置することは、UI を設計する良い方法ではありません。

于 2012-12-14T11:17:13.783 に答える
1

これを行うことはできませandroid:idん。

<ListView
    android:id="@id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/transparent"
    android:cacheColorHint="#00000000" />

inflate getView メソッドを見ないとListView、ビューが膨張したときの最初のインスタンスを追加しようとすることしか推測できません。

IDを次のように変更します @+id/list_view_1 @+id/list_view_2 @+id/list_view_3

これで問題が解決するはずです。

また、ListViewActivityまたはを使用している場合は、他のビューListViewFragmentと同様に、デフォルト クラスを使用する必要があります。getViewById()

于 2012-12-14T11:19:13.193 に答える