2

好吧,所以我遇到了一个相当奇怪的问题。我认为我这样做是正确的,但是当我尝试在我的任何线性布局上将可见性设置为 GONE 时,会发生一些奇怪的事情。

基本上,我要做的是使用微调器 onItemSelected 侦听器来确定哪些布局是可见的。它基本上是一个表格行、微调器和一个线性布局内的三个线性布局,位于一个相对布局内的滚动视图内。这是其中一部分的第一个 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 个按钮是可见的。但是,如果我像打算实际滚动一样滑动手指,则不活动的(它已被破坏,仍然可见)linearlayout2 会突然消失。

关于我做错了什么的任何想法?这让我很恼火,因为它确实有效,这只是一种奇怪的“重影”的美学。

4

1 回答 1

1

似乎只有当您将焦点从微调器清除到任何其他空间时,您的 onItemSelected 才会被调用。尝试记录并检查它何时被调用 - 当您选择微调器或触摸屏幕时。如果是后者,您可能需要重新访问您的代码。

或者,您的布局不会失效。如果 onItemSelected 被正确调用,请在隐藏视图后尝试使布局无效。

于 2013-05-25T09:11:40.297 回答