我ArrayAdapter
在我的应用程序中有大量使用,因为大多数活动都持有ListView
,我需要一些自定义的东西.
我看了一下android开发者文档中的测试类,但是无法找到一些示例或正确的测试类......
1)ArrayAdapter
Android中是否有(单元)测试的最佳实践?
2)我可以选择错误的方法(使用适配器)并以这种方式杀死可测试性吗?
我有一个ListView
每个项目的地方TextView
.
我想启用类似于EditText
显示默认上下文菜单的长按行为,其中包含"全部选中","全部剪切","全部复制"等项目.
有没有一种简单的方法来实现这个TextView
?
我是单元测试的新手,我一直在学习如何使用jUnit框架用于android(使用ActivityInstrumentationTestCase2
),但我在如何将模拟数据源注入和活动时遇到了麻烦,例如:
在活动中我有这个
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState,R.layout.market_screen);
ListView products = (ListView)findViewById(R.id.product_list);
MarketsAdapter adapter = new MarketsAdapter(this, new ProductDataSource());
products.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
我目前将ProductDataSource传递给适配器,该适配器连接到web服务以引入适配器的产品.在我的测试中,我不想连接到webservice.将模拟数据源注入活动进行测试的最佳技术是什么?我应该在Application实例中创建ProductDataSource,然后在我的测试中使用MockApplication来创建模拟数据源吗?
谢谢
我通过在测试类setUp()
方法中执行以下操作来解决:获取对它的引用ListView
并使用设置模拟数据源setAdapter(MockDataSource)
.这必须在UI线程上使用runOnUiThread()
方法运行.
mActivity = getActivity();
mDataSource = new FakeDataSource();
mMarketsListView = (ListView)mActivity.findViewById(R.id.product_list);
mActivity.runOnUiThread(
new Runnable() {
public void run() {
mMarketsListView.setAdapter(new MarketsAdapter(mActivity,mDataSource));
} // end of run() method definition
} // end of anonymous Runnable object instantiation
); //
Run Code Online (Sandbox Code Playgroud) 我的EditText
Android应用中有一个视图.我需要"内部链接",这意味着我需要一些按钮或跨越内部EditText
,onClick
我可以执行一些操作(不重定向到网页).我用ClickableSpan()
这样的方式实现了这个按钮
linkWord = "my link";
link = new SpannableString(linkWord);
cs = new ClickableSpan(){
private String w = linkWord;
@Override
public void onClick(View widget) {
wrd.setText(w);
}
};
link.setSpan(cs, 0, linkWord.length(), 0);
et.append(link);
Run Code Online (Sandbox Code Playgroud)
为了使这个跨度可点击我使用
et.setMovementMethod(LinkMovementMethod.getInstance());
"内部链接"工作正常,但使用et.setMovementMethod()
复制和粘贴项目后禁用OnLongClick
菜单.这是一个问题,因为我需要"链接" EditText
并同时复制此视图中的文本.
我有想法设置监听器的OnLongClickListener
东西,如removeMovementMethod()
临时禁用"链接"功能和使用菜单与复制/粘贴和再次处理文本切换setMovementMethod()
方法后.但我不知道如何实现这一点.
你能帮助我吗?你可能还有另外一些方法......
谢谢!
我有以下示例代码.应用程序第一次安装成功.但是,它会在重新安装时抛出错误.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinkedHashSet<String> planets = new LinkedHashSet<String>();
planets.add("Earth");
SharedPreferences prefs = getPreferences(0);
prefs.edit().putStringSet("planets", planets).commit();
prefs = getPreferences(0);
planets = (LinkedHashSet<String>) prefs.getStringSet("planets", new LinkedHashSet<String>());
}
}
Run Code Online (Sandbox Code Playgroud)
我已经粘贴了重新安装以下应用程序时产生的错误.
Caused by: java.lang.ClassCastException: java.util.HashSet cannot be cast to java.util.LinkedHashSet at com.example.test.MainActivity.onCreate(MainActivity.java:12)
Run Code Online (Sandbox Code Playgroud)
我想了解为什么保存LinkedHashSet
不能被归还给LinkedHashSet
.为什么它会HashSet
被Android自动转换为?
我ListView
在我的Android应用程序中使用了一个.当用户onItemLongClick()
对列表项执行操作时,会AlertDialog.Builder
显示一个菜单.我正在编写单元测试来测试上述功能.以下代码
mListView.performLongClick();
Run Code Online (Sandbox Code Playgroud)
没有引发OnItemLongClickListener()
的ListView
.Robotium
对我来说不是一个选择.任何帮助将不胜感激?