2

さて、私はかなり奇妙な問題に遭遇しています。私はこれを正しく行っていると思いますが、線形レイアウトのいずれかで可視性を GONE に設定しようとすると、奇妙なことが起こります。

基本的に、私がやろうとしているのは、スピナー onItemSelected リスナーを使用して、どのレイアウトが表示されるかを判断することです。これは基本的に、RelativeLayout 内の scrollview 内の 1 つの linearlayout 内のテーブル行、スピナー、および 3 つの linearlayout です。その一部の最初の xml を次に示します。他の 2 つの線形レイアウトは表示されていません。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".Catbug" >

<ScrollView
    android:id="@+id/scrollview1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:ignore="UselessParent" >

    <LinearLayout
        android:id="@+id/home_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:orientation="vertical" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center|center_horizontal|center_vertical" >

            <TextView
                android:id="@+id/textView0"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="left|center_vertical|fill_vertical|center_horizontal|center"
                android:layout_weight="1"
                android:text="@string/catbug_quotes"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textSize="36sp" />

            <ImageButton
                android:id="@+id/catbugback"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@null"
                android:src="@drawable/backbuttonpress" android:contentDescription="@string/goback"/>

        </TableRow>

        <Spinner
            android:id="@+id/catbugspinner"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
             />

        <LinearLayout
            android:id="@+id/catbug7_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

さて、問題の部分のコード側は次のとおりです。

    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub
    final   LinearLayout ep7 = (LinearLayout) findViewById(R.id.catbug7_layout);
    final   LinearLayout ep10 = (LinearLayout) findViewById(R.id.catbug10_layout);
    final   LinearLayout ep11 = (LinearLayout) findViewById(R.id.catbug11_layout);
    int position = spinner.getSelectedItemPosition();
    switch(position){
    case 0:
        ep7.setVisibility(View.VISIBLE);
        ep10.setVisibility(View.VISIBLE);
        ep11.setVisibility(View.VISIBLE);
        break;
    case 1:
        ep7.setVisibility(View.VISIBLE);
        ep10.setVisibility(View.GONE);
        ep11.setVisibility(View.GONE);
        break;
    case 2:
        ep7.setVisibility(View.GONE);
        ep10.setVisibility(View.VISIBLE);
        ep11.setVisibility(View.GONE);
        break;
    case 3:
        ep7.setVisibility(View.GONE);
        ep10.setVisibility(View.GONE);
        ep11.setVisibility(View.VISIBLE);
        break;
    }
}

一般的に、それは機能します。特定のスピナーの選択に必要のないレイアウトは、選択後に消えて画面の上部に表示されます。ただし、スクロールを開始するまで実際には消えません.5つのボタンしか表示されないため、最初のlinearlayoutはスクロールする必要がないため、問題が発生します。ただし、実際にスクロールするつもりだったように指をスワイプすると、非アクティブな (破棄され、まだ表示されている) linearlayout2 が突然消えます。

私が間違っていることについてのアイデアはありますか?それは実際に機能するので、私を悩ませています。それは、その奇妙な「ゴースト」を持つ美学です。

4

1 に答える 1

1

スピナーから他のスペースへのフォーカスをクリアしたときにのみ、 onItemSelected が呼び出されるようです。スピナーを選択したとき、または画面に触れたときなど、いつ呼び出されたかをログに記録して確認してください。後者の場合は、コードを再検討することをお勧めします。

または、レイアウトが無効になりません。onItemSelected が適切に呼び出されている場合は、ビューを非表示にした後でレイアウトを無効にしてみてください。

于 2013-05-25T09:11:40.297 に答える