2012-06-25 7 views
0

expanded_status_bar макет в AOSP 4.0.4 имеет TextView, который выглядит, как это в XMLКак использовать представление, сгенерированное из другого класса?

<com.android.systemui.statusbar.policy.DateView 
    android:id="@+id/date" 
    android:textAppearance="@style/TextAppearance.StatusBar.Date" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="4dp" 
    android:singleLine="true" 
    android:gravity="center" 
    android:visibility="visible" /> 

Он порожден «рамки/база/пакеты/SystemUI/SRC/COM/Android/systemui/статусной/Политика/DateView.java»

Он раздувается "рамки/база/пакеты/systemUI/SRC/COM/Android/systemui/статусной/телефон/PhoneStatusBar.java" как так:

ExpandedView expanded = (ExpandedView) View.inflate(context, R.layout.status_bar_expanded, null); 
// stuff here 
mDateView = (DateView) expanded.findViewById(R.id.date); 

I хотите установить его видимость через другой класс, и я пробовал несколько вещей что я читал здесь, все без везения. Последнее, что я попытался было, в моем классе (который также является частью systemui), добавить следующее:

TextView mDateView = (TextView) findViewById(R.id.date); 
mDateView.setVisibility(View.GONE); 

Однако, оказывается mDateView равна нулю в моем классе. Есть что-то, чего я не хватает? Я много часов искал и пробовал что-то здесь, но ничего не работает. У меня есть навыки Java на уровне среднего уровня, и я все еще пытаюсь обхватить ООП руками, начиная с 20-летнего процессуального языка. Заранее спасибо.

Я изменил определение mDateView, чтобы выглядеть следующим образом:

private DateView mDateView; 
DateView mDateView = (DateView) findViewById(R.id.date); 

Но я все еще получаю mDateView, как будучи нулевой :(

+0

не решен еще? .... –

+0

- класс DateView расширяет расширенный просмотр? –

+0

Привет, я неправильно понял ваш вопрос, решение - это добавить метод в класс, где вы раздуваете свое мнение. – iNan

ответ

1

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

public static void hideDateView() { 
     mDateView.setVisibility(View.GONE); 
    } 

Вы можете добавить следующий метод в PhoneStatusBar .java и Называйте это ли тер.

+0

Попытка этого сейчас. – gdanko

+1

должен работать .. ........... :) –

+0

@gdanko У меня есть одно сомнение в том, что DateView расширяет класс ExpandedView? –

0

У вас есть две проблемы, которые я могу видеть:.

1) Вам нужно будет пройти Context, которому принадлежит ваш View в класс, который вы хотите использовать представление в

Предполагая, что Context это Activity, тогда вы должны использовать activity.findViewById(R.id.date).

2) Если вы собираетесь использовать findViewById(R.id.date), вам нужно убедиться, что вы каким-то образом добавили представление в свою иерархию представления (раздувание не делает этого, если вы специально не указали это). Функция inflate() предоставляет способ сделать это, передав родительское представление вместо null, за которым следует дополнительный логический аргумент, который указывает, следует ли добавлять расширенный вид в родительский элемент.

В качестве альтернативы, вы можете сказать parentView.addView(expanded) после вашего существующего вызова надувания.

+0

Я попытался создать общедоступный метод в PhoneStatusBar.java, так как это класс, который раздувает представление. Это было что-то вроде: public void hideDateView (Context c) {mDateView.setVisbility (View.GONE);} но я бы получил NPE, заявив, что mDateView имеет значение null. Возможно, я поставил метод в неправильном месте. – gdanko

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