2016-12-21 6 views
1

私はAppCompatSpinnerを持っています。TextViewにテキストを設定しようとしています。ここで正しい参照が与えられていても、TextViewでヌルオブジェクト参照を取得する

は私のコードです:

eSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

       final TextView eSpinnerTV = (TextView) adapterView.getSelectedView(); 

       switch (i) { 
        case 0: 
         final Calendar c = Calendar.getInstance(); 
         mHourEnd = c.get(Calendar.HOUR_OF_DAY); 
         mMinuteEnd = c.get(Calendar.MINUTE); 

         TimePickerDialog timePickerDialog = new TimePickerDialog(activityName.this, 
           new TimePickerDialog.OnTimeSetListener() { 

            @Override 
            public void onTimeSet(TimePicker view, int hourOfDay, 
                  int minute) { 

             Calendar date = Calendar.getInstance(); 
             date.set(Calendar.HOUR_OF_DAY, hourOfDay); 
             date.set(Calendar.MINUTE, minute); 
             date.set(Calendar.AM_PM, date.get(Calendar.AM_PM)); 

             sEnd(hourOfDay, minute); 

             uTimeInSF = new SimpleDateFormat("HH:mm:ss").format(date.getTime()); 

             eString = new SimpleDateFormat("hh:mm a").format(date.getTime()); 

             // error on the line below 
             eSpinnerTV.setText(uTimeAMPM); 

            } 
           }, mHourEnd, mMinuteEnd, false); 
         timePickerDialog.show(); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 

ここsEnd.javaファイルのコードは次のとおりです。

<android.support.v7.widget.AppCompatSpinner 
     android:id="@+id/pTime" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="8dp" 
     android:layout_marginBottom="8dp" 
     android:entries="@array/pTimeList" 
     style="@style/Base.Widget.AppCompat.Spinner"> 
</android.support.v7.widget.AppCompatSpinner> 

ここpTimeListだ:

public void sEnd(int hour, int min) { 
     if (hour == 0) { 
      hour += 12; 
      format = "AM"; 
     } else if (hour == 12) { 
      format = "PM"; 
     } else if (hour > 12) { 
      hour -= 12; 
      format = "PM"; 
     } else { 
      format = "AM"; 
     } 

     uTimeAMPM = hour + ":" + min + " " + format; 

    } 

ここxmlコードです上記のコードで指定された行にjava.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

<string-array name="pTimeList"> 
    <item>Pick a time..</item> 
</string-array> 

はできるだけ早く私はTimePickerDialogからの時間を選択した後OKボタンをクリックしていますように、アプリがこのエラーを与えてクラッシュされます。

上記のテキストビューが上記のコードで明確に参照されている場合でも、このエラーの原因は何ですか。final TextView eSpinnerTV = (TextView) adapterView.getSelectedView();

お知らせください。

答えて

2

この

eSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

       **final TextView eSpinnerTV = (TextView) adapterView.getChildAt(position)** 

       switch (i) { 
        case 0: 
         final Calendar c = Calendar.getInstance(); 
         mHourEnd = c.get(Calendar.HOUR_OF_DAY); 
         mMinuteEnd = c.get(Calendar.MINUTE); 

         TimePickerDialog timePickerDialog = new TimePickerDialog(activityName.this, 
           new TimePickerDialog.OnTimeSetListener() { 

            @Override 
            public void onTimeSet(TimePicker view, int hourOfDay, 
                  int minute) { 

             Calendar date = Calendar.getInstance(); 
             date.set(Calendar.HOUR_OF_DAY, hourOfDay); 
             date.set(Calendar.MINUTE, minute); 
             date.set(Calendar.AM_PM, date.get(Calendar.AM_PM)); 

             sEnd(hourOfDay, minute); 

             uTimeInSF = new SimpleDateFormat("HH:mm:ss").format(date.getTime()); 

             eString = new SimpleDateFormat("hh:mm a").format(date.getTime()); 

             // error on the line below 
             eSpinnerTV.setText(uTimeAMPM); 

            } 
           }, mHourEnd, mMinuteEnd, false); 
         timePickerDialog.show(); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 
+0

これが成功しました。同様の問題があります。どうぞご覧ください:http://stackoverflow.com/q/40748389/6144372 –

+0

同じ問題がありますか???? –

+0

いいえ...別の問題です。 –

2

代わりのadapterViewを使用して、スピナーから選択された行のビューを取得するためにonItemSelectedviewオブジェクト二番目のパラメータを使用します。

final TextView eSpinnerTV = (TextView)view.findViewById(android.R.id.text1); 
+0

のように、これは 'spinner'でください。ここのtextviewは、 'xml'ファイル内のものではなく、選択肢として現れるテキストです。 –

+0

@ HammadNasir:どのオブジェクトをsetAdapterメソッドに渡していますか? –

+0

@HammadNasir: 'ArrayAdapter'のObjectを作成するときにレイアウトIDが渡されましたか? –

関連する問題