0

我目前的任务是进行一些 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>
4

1 回答 1

1

对话框不扩展视图,这就是你不能使用的原因:

findViewById(R.id.dialog_new_type);

你为什么不直接使用:

findViewById(R.id.whatever_control_on_the_dialog)
于 2013-08-04T17:27:10.510 回答