我正在尝试测试android偏好设置,但对于如何获得该结果我有些困惑。
这是我的偏好
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:id="@+id/numberListPreference"
android:defaultValue="3"
android:entries="@array/number_text"
android:entryValues="@array/number_value"
android:key="@string/pref_key"
android:summary="@string/pref_summary"
android:title="@string/pref_title" />
</PreferenceScreen>
我想测试一下,当我更改显示的ListPreference中的数字时,SharedPreference实际上是否已更改。
现在,代码可以正常工作了,我只是在测试部分进行拦截。
这是我活动的一部分:
public class SettingActivity extends AppCompatActivity implements
SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager()
.beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
问题是我遇到经典的“如果目标视图不属于视图层次结构”错误。
欢迎任何帮助。 谢谢!
答案 0 :(得分:2)
@Test
public void clickListPreference() throws Exception{
// Check if it is displayed
Context appContext = InstrumentationRegistry.getTargetContext();
onData(allOf(
is(instanceOf(Preference.class)),
withKey(appContext.getResources().getString(R.string.pref_key))))
.check(matches(isDisplayed()));
// Check if click is working
onData(allOf(
is(instanceOf(Preference.class)),
withKey(appContext.getResources().getString(R.string.pref_key))))
.onChildView(withText(appContext.getResources()
.getString(R.string.pref_title))).perform(click());
}
希望这会帮助您...将您的共享首选项置于点击操作下