3

私はsupport libaryを使用しています。android-support-v7 Pkg.Revision = 23.2.1。 API 23用にコンパイルされ、4.1.2デバイスでテストされます。いくつかの最新のUIパターンを実装しようとしているうちに、私はこの問題に遭遇しました。TextInputLayout.setError()は例外をスローします。なぜ、どのように修正するのですか?

activity_test.xmlレイアウト

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <android.support.design.widget.TextInputLayout 
     android:id="@+id/textInputLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="TextInputLayout EditText default - error" /> 

    </android.support.design.widget.TextInputLayout> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="onClickButtonSetError" 
     android:text="TextInputLayout.setError()" /> 

</LinearLayout> 

ActivityTest.java

public class ActivityTest extends AppCompatActivity 
{ 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_test); 
    } 


    public void onClickButtonSetError(View view) { 
     TextInputLayout til = (TextInputLayout)findViewById(R.id.textInputLayout); 
     til.setErrorEnabled(true); 
     til.setError("This is a test error message."); 
    } 
} 

私はSETERROR()メソッドを介してTextInputLayout上のエラーを設定しよう。私をずっと教えてくれないないIllegalAccessErrorである私は、原因を見ることができるように

10-06 15:47:55.239: E/AndroidRuntime(5780): FATAL EXCEPTION: main 
10-06 15:47:55.239: E/AndroidRuntime(5780): java.lang.IllegalStateException: Could not execute method for android:onClick 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.view.View.performClick(View.java:4232) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.view.View$PerformClick.run(View.java:17298) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.os.Handler.handleCallback(Handler.java:615) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.os.Looper.loop(Looper.java:137) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at dalvik.system.NativeStart.main(Native Method) 
10-06 15:47:55.239: E/AndroidRuntime(5780): Caused by: java.lang.reflect.InvocationTargetException 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  ... 11 more 
10-06 15:47:55.239: E/AndroidRuntime(5780): Caused by: java.lang.IllegalAccessError: tried to access method android.support.v7.widget.AppCompatDrawableManager.getPorterDuffColorFilter:()V from class android.support.design.widget.TextInputLayout 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.support.design.widget.TextInputLayout.updateEditTextBackground(TextInputLayout.java:700) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at android.support.design.widget.TextInputLayout.setError(TextInputLayout.java:592) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  at com.example.testandroidsupportv7.ActivityEditText.onClickButtonSetError(ActivityEditText.java:30) 
10-06 15:47:55.239: E/AndroidRuntime(5780):  ... 14 more 

:これはところで、私はこの例外を取得]ボタンをクリックして行われます。私はgetPorterDuffColorFilter()メソッドのaccesモディファイアがライブラリに正しく設定されていないと思います。しかし、これは私の推測です。このbasiclayが私がapp compatライブラリに移行した理由を打倒したので、どうすればこの例外を取り除くことができますか?

答えて

1

あなたは、ほぼ確実に、実行時にクラスの別のバージョンを予想どおりに使用しています。

この

Caused by: java.lang.IllegalAccessError: tried to access method android.support.v7.widget.AppCompatDrawableManager.getPorterDuffColorFilter:()V from class android.support.design.widget.TextInputLayout 

あたりのように私はあなたのための回避策を見つけました。以下は、textInputLayoutのxmlに適用する必要があるスタイルです。

<style name="TextLabel" parent="TextAppearance.AppCompat"> 
<item name="android:textColorHint">@color/colorLightText</item> 
<item name="android:textSize">14dp</item> 
<item name="colorAccent">@color/colorAccent</item> 
<item name="colorControlNormal">@color/colorMediumText</item> 
<item name="colorControlActivated">@color/colorAccent</item> 
<item name="android:textColorHighlight">@color/COLOR</item> 
<item name="android:textColorLink">@color/COLOR</item> 

それはあなたのために働いされているかどうか、私に教えてください。

+0

ありません、それdoesntの。同じ例外です。また、色の変化によって問題がどのように解決されるのか、私は本当に分かりません。 –

0

そのバグ、以下を参照してください https://code.google.com/p/android/issues/detail?id=78377

それは、24.0.0で解決しなければならない...あなたのアンドロイド・サポートを更新し、その問題が解決しない場合はチェックしてみてください。

安定した根本的な解決策がある場合は、回避策を使わないでください。

私はそれが助けてくれることを願っています。

+0

同じ例外ではありません。そしてアプリケーションのサポート23.2.1は私たちの開発環境で動作する最後のバージョンです。サポートライブラリは、異なるバージョンをテストするためにダウンロードすることはできません。 –

0

あなたの問題は、のonclickメソッドに関連付けられて...、私はあなたが別の試してみてください多分知らない、あなたのレイアウトを変更し、ボタンのonclickの属性を省略し、同様に完全なコードでの活動でそれを宣言してください:

変更activity_test.xmlでボタン

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnSetError" 
    android:text="TextInputLayout.setError()" /> 

ActivityTest.java

public class ActivityTest extends AppCompatActivity 
{ 
    private TextInputLayout txtInput; 
    private Button btnSetError; 
    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_test); 

    txtInput = (TextInputLayout) findViewById(R.id.textInputLayout); 
    btnSetError =(Button)findViewById(R.id.btnSetError); 
    btnSetError.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      txtInput.setError("ERROR"); 
     } 
    }); 

} 
関連する問題