2015-09-19 5 views
3

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

У меня есть XML-макет, где у меня есть относительный макет, который я использую в качестве владельца места для разных видов.

<RelativeLayout 
    android:id="@+id/relVariableLayoutPlaceHolder" 

    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 

    android:background="@color/white" 
    > 

</RelativeLayout> 

В моей деятельности, у меня есть кнопка для пользователя, чтобы нажать и при нажатии клавиши, я хочу обычай ClockView быть создан и добавлен динамически. Обратите внимание, что _variableLayout прекрасно установки в методе onCreate:

public void onStartTimeClick(View view) 
{ 
    //Clean up any left over views 
    _variableLayout.removeAllViews(); 

    //Add clock view 
    ClockView clockView = new ClockView(_context); 
    _variableLayout.addView(clockView); 
} 

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

Я загрузил некоторые изображения здесь до и после нажатия TextView: http://imgur.com/a/9lebv

Я предположил бы, что это что-то делать с экрана не обновляется после представления часов рисуется, но я пробовал все комбинации invalidate() и requestLayout() Я могу придумать. Есть идеи?

ответ

2

Для исторических целей, я чувствовал, что я должен отметить, что после того, как много отладки я понял, что моя проблема была в onMeasure и onLayout функций ClockView. В основном они были плохо сформированы и не правильно измеряли подвыводы для правильной обработки функции onLayout.

Как только я их убрал, все работает так, как ожидалось.

1

Вы пытались установить LayoutParams?

public void onStartTimeClick(View view) 
{ 
    //Clean up any left over views 
    _variableLayout.removeAllViews(); 

    //Add clock view 
    ClockView clockView = new ClockView(_context); 
    RelativeLayout.LayoutParams layout_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    clockView.setLayoutParams(layout_params); 
    _variableLayout.addView(clockView); 
} 
+0

Спасибо за предложение. Я фактически объявляю параметры макета в объекте ClockView, но я удалил это и попробовал это, чтобы убедиться. Тот же результат. –

+0

Вы можете включить некоторые параметры отладки на устройстве Android, чтобы увидеть, что отображается. И также есть средство просмотра иерархии из инструментов Android, чтобы проверить его: http://developer.android.com/tools/help/hierarchy-viewer.html –

+0

Интересно ... Когда я нажимаю кнопку «Дамп-иерархия» из инструментов Android окно, ClockView появится на моем устройстве. Таким образом, вид, очевидно, есть, он просто не отображается на устройстве изначально. Все еще в растерянности, но, по крайней мере, это доказывает, что я не сумасшедший. –

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