2017-02-09 49 views
-2

我試圖將選定的日期值設置爲edittext。我得到以下錯誤從外部類設置edittext值時出現錯誤

顯示java.lang.NullPointerException:嘗試上的空對象引用

public static class AddDataFragment extends BaseFragment implements { 
@BindView(R.id.tvStartVisit) 
    public TextView tvStartVisit; 

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_add_visit, container, false); 
     ButterKnife.bind(this, view); 
     setData(); 
     return view; 
    } 

@OnClick(R.id.tvStartVisit) 
    public void onStartVisitDateClicked(){ 
     DialogFragment newDialogFragment = new DatePickerFragment(); 
     newDialogFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 
    } 

    public static class DatePickerFragment extends DialogFragment 
      implements DatePickerDialog.OnDateSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     public void onDateSet(DatePicker view, int year, int month, int day) { 
      AddVisitFragment mAddVisitFragmentForDatePicker = new AddDataFragment(); 
      mAddVisitFragmentForDatePicker.tvStartVisit.setText(year+"-"+month+"-"+day); 
     } 
    } 
} 

回答

0
調用虛擬方法 '無效android.widget.TextView.setText(java.lang.CharSequence中)'

已更改

static TextView tvStartVisit; 


    public void onDateSet(DatePicker view, int year, int month, int day) { 

     tvStartVisit.setText(year+"-"+month+"-"+day); 
    } 
0

您可以在對話方法中傳遞該textview的對象。

public static class AddDataFragment extends BaseFragment implements { 
     @BindView(R.id.tvStartVisit) 
     public TextView tvStartVisit; 

     @OnClick(R.id.tvStartVisit) 
     public void onStartVisitDateClicked(){ 
      DialogFragment newDialogFragment = new DatePickerFragment(tvStartVisit); 
      newDialogFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 
     } 

     public static class DatePickerFragment extends DialogFragment 
       implements DatePickerDialog.OnDateSetListener { 

      TextView tvStartVisit; 
      DatePickerFragment(TextView tvStartVisit) { 
       this.tvStartVisit = tvStartVisit; 
      } 

      @Override 
      public Dialog onCreateDialog(Bundle savedInstanceState) { 
       // Use the current date as the default date in the picker 
       final Calendar c = Calendar.getInstance(); 
       int year = c.get(Calendar.YEAR); 
       int month = c.get(Calendar.MONTH); 
       int day = c.get(Calendar.DAY_OF_MONTH); 

       return new DatePickerDialog(getActivity(), this, year, month, day); 
      } 

      public void onDateSet(DatePicker view, int year, int month, int day) { 
       AddVisitFragment mAddVisitFragmentForDatePicker = new AddDataFragment(); 
       tvStartVisit.setText(year+"-"+month+"-"+day); 
      } 
     } 
    } 
+0

在DatePickerFragment(TextView的tvStartVisit){ this.tvStartVisit = tvStartVisit獲得誤差; } –

0

這是因爲tvStartVisitnull。您沒有限制View

onCreateDialog請確保您撥打ButterKnife.bind(this, view);(或無論您的庫的綁定方法是什麼)。

或者您可以在TextView創建之前傳遞您的日期。

0

嘗試此

public static class AddDataFragment extends BaseFragment 
        implements DatePickerDialog.OnDateSetListener { 
@BindView(R.id.tvStartVisit) 
public TextView tvStartVisit; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_add_visit, container, false); 
    ButterKnife.bind(this, view); 
    setData(); 
    return view; 
} 

@OnClick(R.id.tvStartVisit) 
public void onStartVisitDateClicked(){ 
    DialogFragment newDialogFragment = new DatePickerFragment(AddDataFragment.this); 
    newDialogFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 
} 

public static class DatePickerFragment extends DialogFragment { 
    DatePickerDialog.OnDateSetListener listener 
    public DatePickerFragment(DatePickerDialog.OnDateSetListener listener) { 
    this.listener = listerner; 
    } 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     return new DatePickerDialog(getActivity(), listener, year, month, day); 
    } 
} 

@Override 
public void onDateSet(DatePicker view, int year, int month, int day) { 
     tvStartVisit.setText(year+"-"+month+"-"+day); 
    } 
} 
+0

DialogFragment沒有出現錯誤newDialogFragment = new DatePickerFragment(AddDataFragment.this); –

+0

給出錯誤的詳細信息 – arjun

相關問題