2016-04-15 6 views
2

SwipeRefreshLayoutは、終了アニメーションにセット変数を使用します。特定のユースケースでは、これを0に変更する必要がありますが、どのように考え出すことはできません。変数は次のとおりです。SwipeRefreshLayout - アニメーションのタイミングを変更します。

private static final int SCALE_DOWN_DURATION = 150; 

ご協力いただければ幸いです。

+0

だけでソースをつかむと、getDeclaredField(java.lang.Stringで) – ootinii

答えて

0

プライベートフィールドにアクセスし、JavaリフレクションAPIを使用して値を0に更新する必要があります。フィールドは最終的なものなので、this postに記載されているように、この情報を削除するために修飾子を更新する必要があります。

Field duration = SwipeRefreshLayout.class.getDeclaredField("SCALE_DOWN_DURATION"); 
duration.setAccessible(true); // counteract private modifier 

Field mods = Field.class.getDeclaredField("modifiers"); // retrieve modifiers for the constant field 
mods.setAccessible(true); 
int finalValue = mods.getModifiers() & ~Modifier.FINAL; // flip final value, allowing mutation of the field 
mods.setInt(mods, finalValue); 
duration.setInt(hack, 0); // set value 

それは言うまでもないが、これはSwipeRefreshLayoutの実装の詳細であるとして、これは将来的には、警告なしに壊れないという保証はありません。このようにいくつかの変更が必要な場合は、クラスをフォークして独自のバージョンを維持する方が良い解決策かもしれません。

+0

「方法を解決することはできません 『getDeclaredModifiers(java.lang.Stringで)』」 – Psest328

+0

更新メソッド名に合わせて、それを修正するのが最善かもしれません。 lang.NoSuchFieldException:クラスLjava/lang/reflect/Fieldのフィールド修飾子がありません。 ( 'java.lang.reflect.Field'の宣言は/system/framework/core-libart.jarにあります) – fractalwrench

+1

Javaへのニーズ – Psest328

関連する問題