好吧,所以我遇到了一个相当奇怪的问题。我认为我这样做是正确的,但当我尝试在任何线性布局上将可见性设置为GONE时,会发生一些奇怪的事情。
基本上,我要做的是使用微调器onItemSelected侦听器来确定哪些布局是可见的。它基本上是一个表行,微调器和三个线性布局,位于RelativeLayout内部的scrollview内部的一个linearlayout内。这是它的第一部分xml,只是没有显示其他2个linearlayouts:
<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突然消失了。
关于我做错的任何想法?这让我感到害怕,因为它确实有效,只是具有那种奇怪的“重影”的审美。
答案 0 :(得分:1)
当您将旋转器的焦点清除到任何其他空间时,您的onItemSelected似乎才会被调用。尝试记录并检查何时调用它 - 当您选择微调器或触摸屏幕时。如果是后者,您可能需要重新访问代码。
或者,您的布局不会失效。如果正确调用了onItemSelected,请在隐藏视图后尝试使布局无效。