如何使布局可见/消失?

时间:2016-09-16 13:48:03

标签: android android-layout

我正在开发一个使用地理定位的应用程序,我希望在接近某个点时设置一个可见的布局,在距离该点太远时设置为GONE。

这是我的xml:

<LinearLayout
    android:visibility="gone"
    android:id="@+id/slidePane"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

然后我像往常一样在活动中使用ID: 在class属性中声明它:

private LinearLayout slidepane;

在onCreate()方法中设置它:

slidepane = (LinearLayout) findViewById(R.id.slidePane);

然后我尝试在onLocationChanged()方法中更新它,如下所示:

if (InterestPoint.CalculationByDistance(location, new LatLng(47.247801, -1.551883)) < 0.03) {
    Toast.makeText(MainActivity.mContext, "InterestPoint close", Toast.LENGTH_SHORT).show();
    slidepane.setVisibility(View.VISIBLE);
} else {
    slidepane.setVisibility(View.GONE);
}

所以条件是正确的,因为Toast出现但布局不可见,为什么?

谢谢。

编辑:我正在使用https://github.com/umano/AndroidSlidingUpPanel并尝试设置第二个孩子(滑动面板)的可见性。我没有在文档中看到有关可见性的任何内容。我仍然可以访问LinearLayout的子项,但不能访问容器本身(特别是可见性)。

2 个答案:

答案 0 :(得分:2)

替换它:

slidepane.setVisibility(View.VISIBLE);

用这个:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        slidepane.setVisibility(View.VISIBLE);
    }
});

答案 1 :(得分:0)

确保在初始化时设置视图的可见性。

@Override
protected void onCreate(Bundle savedInstanceState) {
........
slidepane = (LinearLayout) findViewById(R.id.slidePane);    
slidepane.setVisibility(View.GONE);
.......

    //onLocationChanged() add ->

    if (InterestPoint.CalculationByDistance(location, new LatLng(47.247801, -1.551883)) < 0.03) {
    Toast.makeText(MainActivity.mContext, "InterestPoint close", Toast.LENGTH_SHORT).show();
    slidepane.setVisibility(View.VISIBLE);
   } else {
    slidepane.setVisibility(View.GONE);
   }