Настройка Android-модуля RelativeLayout - PullRequest
1 голос
/ 20 марта 2010

Я пытаюсь написать модульный тест для RelativeLayout моего Android. В настоящее время мои настройки тестового кода следующие:

public class SampleRelativeLayoutTest extends AndroidTestCase {

private ViewGroup testView;

private ImageView icon;
private TextView  title;


@Override
protected void setUp() throws Exception {
    super.setUp();
    // inflate the layout
    final Context context = getContext();
    final LayoutInflater inflater = LayoutInflater.from(context);
    testView = (ViewGroup) inflater.inflate(R.layout.sample_layout,
            null);
    // manually measure and layout
    testView.measure(500, 500);
    testView.layout(0, 0, 500, 500);
    // init variables
    icon = (ImageView) testView.findViewById(R.id.icon);
    title = (TextView) testView.findViewById(R.id.title);
}

Однако я обнаружил исключение NullPointerException со следующей трассировкой стека

java.lang.NullPointerException
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:427)
at android.view.View.measure(View.java:7964)
at com.dqminh.test.view.SampleRelativeLayoutTest.setUp(SampleRelativeLayoutTest.java:33)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

Что я должен изменить в своем коде setUp (), чтобы тест выполнялся правильно?

Ответы [ 4 ]

1 голос
/ 20 марта 2010

У меня есть копия исходного кода Android, но я не уверен, что это то же самое, что и вы (или, возможно, для этого класса это не имеет значения). Исключением является исключение NullPointerException в строке 427 RelativeLayout внутри метода onMeasure. Эта строка в версии, которую я имею, является первым доступом к переменной экземпляра mLayoutParams в методе onMeasure. Возможно, вы забыли добавить параметры layout_width и layout_height в свой XML-макет или что-то в этом роде?

0 голосов
/ 03 мая 2012

Другая возможная причина заключается в следующем: у вас есть круговая зависимость между размером RelativeLayout и положением его потомков. Например, у вас есть RelativeLayout, высота которого установлена ​​на WRAP_CONTENT, а дочерний элемент установлен на ALIGN_PARENT_BOTTOM.

Ниже приведена аннотация RelativeLayout:

Схема, в которой положение детей может быть описано в отношение друг к другу или к родителю. Ради эффективности, отношения между представлениями оцениваются за один проход, поэтому, если представление Y в зависимости от позиции вида X, убедитесь, что вид X идет первым в макете.

Обратите внимание, что у вас не может быть круговой зависимости между размером RelativeLayout и положением его потомков. Например, у вас не может быть RelativeLayout, высота которого установлена ​​на WRAP_CONTENT, а дочерний элемент - ALIGN_PARENT_BOTTOM.

Также см. RelativeLayout.LayoutParams для атрибутов макета.

0 голосов
/ 20 апреля 2012

Я сделаю это и сделаю:

LayoutParams layoutParams = new LayoutParams(500,500);
testView.setLayoutParams(layoutParams);
testView.layout(0, 0, 500, 500);
0 голосов
/ 10 апреля 2012

Также работает, если вы оборачиваете свой RelativeLayout внутри LinearLayout. и вместо этого передайте Linearlayout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...