我写了一个包含Activity
和ListView
的简单TextView
。选择ListView
项后,TextView
会反映项目文字。我没有特别添加处理旋转变化的代码。当我运行应用程序时,我得到了预期的结果:
TextView
TextView
的默认值然而,在运行我的测试(扩展ActivityInstrumentationTestCase2
)后,会发生这种情况:
TextView
的旧值(尽管我可以看到我的设备上的文字发生了变化!)这是我的测试:
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity=(MainActivity) getActivity();
lv=(ListView) mActivity.findViewById(com.example.samplee.R.id.lv1);
}
public void testDestroy() {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
lv.requestFocus();
lv.setSelection(0);
}
});
this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
//select 2nd item in ListView
this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
TextView tv=(TextView)mActivity.findViewById(com.example.samplee.R.id.textView1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String origValue=(String) tv.getText();
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv=(TextView)mActivity.findViewById(com.example.samplee.R.id.textView1);
String newValue=(String) tv.getText(); //gets same value as origValue!
assertEquals(origValue,newValue); //always succeds;
}
在某些SO帖子中,我读到了使用getInstrumentation().waitForIdleSync()
代替我的Thread.sleep()
代码。那也没有用。
我也尝试过Robotium。没变!关于如何解决这个问题的任何指示?
答案 0 :(得分:1)
轮换后,您将获得一个新活动。尝试用solo.getCurrentActivity()替换mActivity.findViewById(...)。findViewById(...)。