如何在测试中选择下拉列表的第一项

6

我有一个测试,在Spinner上测试OnItemSelectedListener。当测试的项目 > 0时,它运行良好。但是似乎我无法测试第一项。

如果我选择索引 > 0 的项目,则当前的实现如下所示,可正常工作。

final Addpointer addPointer = getActivity();

    addPointer.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            EditText address = (EditText) addPointer.findViewById(R.id.address);
            address.setText("a");
            Spinner spinner = (Spinner) addPointer.findViewById(R.id.intOrHex);
            spinner.setSelection(0);
            View view = (View)  spinner.getChildAt(0);
            long id = spinner.getAdapter().getItemId(0);
            spinner.performItemClick(view, 0, id);

        }
    });

我需要怎么做才能让测试“选择”第一项?

先行致谢

回答: 1)Rahul Garg提到的设置“animate”是解决问题的关键。 2)但是,除非选择实际改变(0是初始状态,因此在将其设置回零之前,我需要将其设置为一),否则无法触发onSelectionChanged。


如何在Android中正确动态更新Spinner?:https://dev59.com/qWDVa4cB1Zd3GeqPhNrG#9443400在setOnItemClickListener中设置你的选择。 - Samir Mangroliya
@Samir 这是决定选择的测试,它有效,除非我试图将其设置为零。 - Roland
3个回答

8

使用

spinner.setSelection(0,true);

第二个参数实际上会将选择动画到0索引。

不,我的OnClickListener没有接收到设置为true的animate调用。 - Roland
我之前说错了。但是我需要将选择设置为1,然后设置文本字段,最后再将其设置为0。显然,不能将OnSelectionChanged触发器设置为已经存在的相同数字。 - Roland

7

更加“透明”的方式:

     Spinner.setSelection(Adapter.NO_SELECTION, false);**

*第二个参数用于选择动画

**在此之后应该调用:

     Spinner.setAdapter(...); 

或者涉及 Spinner.setSelection() 的任何种类的方法,例如:

    Adapter.notifyDataSetChanged(); 

为了防止OnItemSelectedListener()被触发,您需要使用&。


1
太好了!我在onCreate中使用Butter Knife引用Spinner后添加了Spinner.setSelection(Adapter.NO_SELECTION, false);。我还使用Butter Knife注册了Spinner回调。现在,无论选择哪个项目,在活动重新创建后回调只会被调用一次(仅限一次)。这就是我需要的行为。 - x-ray

0
请查看开发者指南中的SpinnerTest示例应用程序。它实际上向活动发送按键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接