3

У меня есть два класса. Одна из них - моя основная деятельность, а другая - вспомогательный метод, который должен открыть Android DatePicker. До сих пор все работало нормально, за исключением случаев, когда я хочу получить дату из класса выбора даты. Вот мои классы:Открытый метод, невидимый для другого класса в том же пакете

// This is the class that creates the date picker 
    package com.strom.myapp; 

    import android.app.DatePickerDialog; 
    import android.app.Dialog; 
    import android.app.DialogFragment; 
    import android.os.Bundle; 
    import android.widget.DatePicker; 

    import java.util.Calendar; 



    public class DefaultDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

     private String returnDate; 


     public String getReturnDate() { 
      return returnDate; 
     } 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      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); 
     } 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      returnDate = String.valueOf(dayOfMonth) + 
        "." + 
        String.valueOf(monthOfYear) + 
        "." + 
        String.valueOf(year) + 
        ", 00:00"; 
     } 
    } 

И здесь основная деятельность

package com.strom.myapp; 

import android.app.DialogFragment; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class BalanceScreen extends ActionBarActivity { 

private String payDate; 

// ... omitted code ... 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     if (id == R.id.action_payDate) { 

      DialogFragment datePicker = new DefaultDatePicker(); 
      datePicker.show(getFragmentManager(), "datePicker"); 
      payDate = datePicker.getReturnDate(); 

      return true; 
     } 


// ... omitted code ... 

} 

Поглотитель-метод 'datePicker.getReturnDate();' недоступен из основного вида деятельности, даже если они находятся в одном пакете. Я не понимаю, почему это не должно работать. Что мне здесь не хватает?

ответ

5

я предлагаю вам заменить:

DialogFragment datePicker = new DefaultDatePicker(); 

с

DefaultDatePicker datePicker = new DefaultDatePicker(); 

Поскольку ваш метод getReturnDate объявлен в DefaultDatePicker, а не в DialogFragment.

+1

Это, я был слишком медленным. –

0

Вы можете бросить datePicker (который refeers экземпляр DefaultDatePicker) в DefaultDatePicker для вызова методов, которые являются специфическими для DatePickerDialog.OnDateSetListener.

((DefaultDatePicker)datePicker).getReturnDate() 
0

Добавить публичную переменный вашу деятельность говорят

public String dateFromPicker = ""; 

В DefaultDatePicker методы onDateSet сделать это

((BalanceScreen)getActivity()).dateFromPicker = returnDate; 
Смежные вопросы