0

android:onClick属性をAutoCompleteTextViewに割り当てると、アクティビティをロードするとすぐにアプリケーションがクラッシュします。私はonClickメソッドを割り当てることなくAutoCompleteTextViewをテストしました。それはonClickを他のビュー(EditText、Spinners、TextViews、Buttons、およびImageButtonsを含む)に割り当てるのと同じようにうまくいくようです。私は24行目(setContentView(R.layout.activity_main))にエラーを絞り込むことができました。誰かがこれについていくつかの光を当てることができますか?NullPointerExceptionを与えるAutoCompleteTextViewにOnClickListenerを割り当てるのはなぜですか?

MainActivity.java

package com.example.matt.testapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 

public class MainActivity extends AppCompatActivity { 
    public AutoCompleteTextView actv; 
    public String[] continents = {"North America", 
      "South America", 
      "Antarctica", 
      "Europe", 
      "Africa", 
      "Asia", 
      "Australia" 
    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     actv = (AutoCompleteTextView) findViewById(R.id.actv); 
     ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, continents); 
     actv.setAdapter(adapter); 
    } 

    public void actvClick (View view) {} 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" > 

    <AutoCompleteTextView 
     android:id="@+id/actv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="actvClick" > 
    </AutoCompleteTextView> 
</LinearLayout> 

Logcat

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.matt.testapp/com.example.matt.testapp.MainActivity}: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class AutoCompleteTextView 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Caused by: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class AutoCompleteTextView 
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class AutoCompleteTextView 
Caused by: java.lang.NullPointerException: Attempt to write to field 'android.view.View$OnClickListener android.widget.AutoCompleteTextView$PassThroughClickListener.mWrapped' on a null object reference 
at android.widget.AutoCompleteTextView$PassThroughClickListener.-set0(Unknown Source:0) 
at android.widget.AutoCompleteTextView.setOnClickListener(AutoCompleteTextView.java:307) 
at android.view.View.<init>(View.java:5008) 
at android.widget.TextView.<init>(TextView.java:824) 
at android.widget.EditText.<init>(EditText.java:88) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:220) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:193) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:172) 
at android.support.v7.widget.AppCompatAutoCompleteTextView.<init>(AppCompatAutoCompleteTextView.java:68) 
at android.support.v7.widget.AppCompatAutoCompleteTextView.<init>(AppCompatAutoCompleteTextView.java:64) 
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:130) 
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1026) 
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1083) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
at com.example.matt.testapp.MainActivity.onCreate(MainActivity.java:24) 
at android.app.Activity.performCreate(Activity.java:6975) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
+2

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+2

投票者を閉じるための注記:これはOPコードのNPEではなく、プラットフォームコードです。 – laalto

答えて

0

このL ooksはAutoCompleteTextViewのバグになります。何が起こる

:XMLを膨らま

  1. AutoCompleteTextViewコンストラクタを呼び出し、それがViewコンストラクタを呼び出します。
  2. ViewコンストラクタはonClick属性を参照し、setOnClickListener()を呼び出します。
  3. は、内部mPassThroughClickListenerフィールドに書き込むsetOnClickListener()を上書きしました。 AutoCompleteTextViewコンストラクタの最後でのみ初期化され、このinitコードはまだ実行されていません。 Reference

はそれを回避するには、XMLからonClick attrtibuteを削除し、あなたのコードでプログラムsetOnClickListener()を呼び出します。

私はAndroidの問題追跡ツールでこれについてbugを提出しました。

+0

卒中とバグ報告に感謝します。 TestAppでsetOnClickListenerをプログラムでテストしたところ、問題なく実行されました。私はそれに応じて私の質問を編集します。 – beige

関連する問題