2013年6月30日日曜日

ActivityUnitTestCaseでjava.lang.RuntimeException:

以下のようなコードを書いた
public class SampleTest extends ActivityUnitTestCase<MainActivity> {

 public SampleTest (
   Class<MainActivity> activityClass) {
  super(activityClass);
 }
}
このコードだと以下のようなエラーを吐いて、テストが始まる前に落ちる。
このコンストラクタは、1行目だけ書いた段階でEclipseのQuick Fixで生成されたコンストラクタ。でもこれだと動かない。
java.lang.RuntimeException: Exception during suite construction at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)

解決策はパラメータの無いコンストラクタを用意すること。


public class SampleTest extends ActivityUnitTestCase<MainActivity> {
 public SampleTest ( ) {
  super(MainActivity.class);
 }

}

これで動く。

2013年6月28日金曜日

ViewPagerのスライド速度変更

ViewPagerをフリックした時の画面の切り替わりが遅いと、縦方向のスクロールビュー(リストビュー等)と組み合わせると相性が悪い。
フリックした直後に縦にスクロールしようとしても、スワイプ動作がViewPagerの方に取られてしまうからだ。

スライドのアニメーションの速度を上げればこの問題は解決する。
やり方は下記に書いてあった。
http://stackoverflow.com/questions/8155257/slowing-speed-of-viewpager-controller-in-android

ポイントは
1.自前のScrollerを定義して、startScrollをOverrideし速度を好きな値にする
2.ViewPagerのmScrollerに1で定義したScrollerを使う。
※ただしViewPager::mScrollerはprivateなのでリフレクションを使う必要がある。

ソースコードは上記ページを参照のこと。