2016-09-16 2 views
0

Я работаю над приложением, использующим геолокацию, и хочу установить макет VISIBLE, когда он близок к точке и GONE, когда он слишком далеко от точки.Как сделать макет видимым/ушедшим?

Это мой XML:

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

Затем я использую идентификатор в деятельности, как обычно: объявить его в атрибут класса:

private LinearLayout slidepane; 

установить его в OnCreate() метод :

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

А потом я пытаюсь обновить его в onLocationChanged() методом, Ф.О. llows:

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 появляется, но расположение не становится видно, почему?

спасибо.

EDIT: Я использую https://github.com/umano/AndroidSlidingUpPanel и пытаюсь установить видимость второго ребенка (раздвижной панели). Я ничего не видел в документации о видимости. Я все еще могу получить доступ к дочерним элементам LinearLayout, но не к самому контейнеру (и особенно к видимости).

+2

Первое, что я хотел бы сделать, это обеспечить отображение на самом деле в целом. Иногда их можно сдвинуть с экрана или за другим видом. – DeeV

+2

Если вы видите видимость, видимую в xml, можете ли вы ее увидеть? – lelloman

+0

Да, если я не укажу, что «ушла» видимость, она полностью видима и функциональна. – Axl

ответ

2

Заменить это:

slidepane.setVisibility(View.VISIBLE); 

с этим:

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

Как это решить проблему? –

+0

это МОЖЕТ решить проблему, потому что пользователь делает изменение пользовательского интерфейса на 'onLocationChanged()', который может быть в потоке. Если это так, это не изменит пользовательский интерфейс. 'runOnUiThread (..)' будет –

+0

Значит, вы хотите сказать, что 'onLocationChanged' вызывается в фоновом потоке? –

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); 
    } 
+0

, поэтому, используя 'View.INVISIBLE', вы просто игнорируете предпочтение пользователя, чтобы сделать GONE? View.INVISIBLE использует пространство на экране, пока View.GONE этого не делает. Пользователь выбирает, чтобы представление не занимало места. Вы не даете решения. вы меняете вариант использования –

+0

Я также попытался установить его в init, но он не изменился, поэтому я удалил его, так как по умолчанию он «ушел» в xml. – Axl

+0

попробуйте сделать с последним измененным кодом моего, НЕВИДИМЫЙ и ВИДИМЫЙ – W4R10CK

Смежные вопросы