2012-04-19 3 views
4

Я новичок в разработке с Android. У меня есть сетка, содержащаяся в LinearLayout, и каждый элемент, составляющий сетку, является кнопкой. Я хочу, чтобы этот LinearLayout был невидим, когда пользователь нажимает любую из этих кнопок.SetVisibility не работает?

Это мой «дом» макет оболочки:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView/> 
    <LinearLayout> //<-- this is the layout I want to hide 
    <TextView/> 
    <GridView/> 
    </LinearLayout> 
</LinearLayout> 

И это метод OnClick, который я создал в MyArrayAdapter (используется для накачивания кнопки)

@Override 
public void onClick(View v) { 
    View convertView = activity.getLayoutInflater().inflate(R.layout.layout_home, null); 
    LinearLayout ll_options = (LinearLayout) convertView.findViewById(R.id.ll_options); 
    ll_options.setVisibility(View.INVISIBLE); 
} 

Я думаю, что это должен работать, но когда я его тестирую, ничего не происходит.

Я нашел аналогичный вопрос, но он не решает мою проблему.

ответ

8

Почему вы раздувания макет здесь ?:

View convertView = activity.getLayoutInflater().inflate(R.layout.layout_home, null); 

Вобще:

View v = activity.findViewById(R.id.ll_options); 
v.setVisibility(View.INVISIBLE); 
+0

Все, что было ошибкой. Спасибо за быстрые ответы! – dnaranjo

0

EDIT:

Где ваша кнопка? Является ли он одним и тем же файлом-макетом? Вы надуваете новый макет и скрываете LinearLayout там, но этот новый макет никогда не используется. Убедитесь, что у вас есть доступ к contentView в вашем слушателе.

2

Вы можете создать новый вид, который не находится в видимой зрения иерархии, пока вы не добавите его там, и то вы это скрываете. Таким образом, вы скрываете что-то невидимое.

Вместо этого попробуйте:

@Override 
public void onClick(View v) { 
    findViewById(R.id.ll_options).setVisibility(View.INVISIBLE); 
} 

, которая должна ИМО работать. Он ищет вид ll_options внутри видимой (глобальной) иерархии представлений вашей деятельности и скрывает это.

+0

Это правильно, хотя на самом деле вы можете предпочесть 'View.GONE'' View.INVISIBLE', в зависимости от приложения. – mlc

+0

yup, в зависимости от того, хотите ли вы освободить пространство, которое было просмотрено (GONE), или просто скрыть его, но сохранить его в пространстве (INVISIBLE), просто установив его невидимым, также быстрее, если вы сильно измените видимость и невидимость с момента представления иерархия не изменяется – zapl

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