我目前的任务是进行一些 Android GUI 测试,但我很难找到对位于从基本视图打开的对话框上的元素的引用:
setContentView(R.layout.dialog_new_type);
对于查找控件,我使用 findViewById, f.ex:
Button addType = (Button) mainActivity.findViewById(R.id.main_menu_button_add_type);
这很好用。按下此按钮后,将打开一个自定义对话框:
new DialogNewType(v.getContext(), controller).show();
并找到该对话框上的控件让我头疼。
我想基本的想法是这样的:
findViewById(R.id.dialog_new_type).findViewById(R.id.whatever_control_on_the_dialog)
,但是对对话框的引用返回 null。我还尝试通过使用来获取对对话框的引用findViewById(R.layout.my_dialog)
,也返回 null。
或者,我尝试使用 Robotium 框架来控制控件,如下所示:
ArrayList<EditText> test = solo.getCurrentViews(EditText.class);
EditText et = test.get(0);
通过这种方式,我获得了对所需控件的引用,但是我发现它非常肮脏的解决方案,并且更愿意使用“plain old Android”获得相同的解决方案。
这是对话框布局的样子:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/dialog_new_type"
>
<EditText
android:hint="@string/dialog_new_type_edit_hint"
android:inputType="textAutoCorrect"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:visibility="visible"
android:id="@+id/dialog_new_type_edit">
<requestFocus></requestFocus>
</EditText>
</LinearLayout>