2013-02-25 13 views
8

Jestem nowicjuszem w Javie i próbuję utworzyć działanie za pomocą EditText. Podczas tworzenia ładuje się z bieżącą datą, a gdy użytkownik wybierze EditText, wyświetla DatePicker. Gdy użytkownik wybierze datę, muszę umieścić wynik w EditText. Jednak obecnie otrzymuję następujący błąd:Błąd: "Nie można utworzyć statycznego odwołania do metody niestatycznej findViewById (int) z typu Activity"

Cannot make a static reference to the non-static method findViewById(int) from the type Activity

Wiem, że nie mogę wykonać statycznego odwołania do metody niestatycznej. Próbowałem usunąć wszystkie statyczne odwołania, ale to dało mi inne błędy. Mój kod znajduje się poniżej.

Czy możesz mi pomóc z przykładowym kodem, w jaki sposób mogę to wykonać? Błąd występuje wtedy, gdy próbuję umieścić wynik w EditText.

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Get Current Date and assign to EditText Begin 
    Calendar c = Calendar.getInstance(); 
    System.out.println("Current time => " + c.getTime()); 

    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy", Locale.US); 
    String formattedDate = df.format(c.getTime()); 

    EditText ShowDate = (EditText) findViewById(R.id.editTextToShowDate); 
    ShowDate.setText(formattedDate); 
    //Get Current Date and assign to EditText End 
} 

//Date Picker Start 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) public void showDatePickerDialog(View v) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getFragmentManager(), "datePicker"); 
}  

@TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class DatePickerFragment extends DialogFragment 
implements DatePickerDialog.OnDateSetListener { 

@TargetApi(Build.VERSION_CODES.HONEYCOMB) @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); 

// Create a new instance of DatePickerDialog and return it 
return new DatePickerDialog(getActivity(), this, year, month, day); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
// Do something with the date chosen by the user 
    String sToDate = createStringFromDateElements(year, month, day); 
    EditText ShowDate = (EditText) findViewById(R.id.editTextToShowDate); //I get the error here 
    ShowDate.setText(sToDate); 
} 

private String createStringFromDateElements(int year, int month, int day) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 
//Date Picker End 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 
+3

Kiedy jesteś nowy java proszę spędzić trochę czasu na zrozumienie Java następnie wkroczyć android. Android to nadzbiór java. – NewUser

+0

Spróbuj odpowiedzieć, że zadziała – Pragnani

+0

wystarczy, że klasa DatePickerFragment stanie się niestatyczna, dlatego jest zawarta w zasięgu instancji MainActivity. – njzk2

Odpowiedz

14

Edit:

EditText ShowDate = (EditText)getActivity(). findViewById(R.id.editTextToShowDate); 

Będzie to działać ...

+0

To powinno zadziałać ...... –

+0

Nie, przeczytaj quesiton. nie chodzi o casting, chodzi o zasięg dostępu do metody. – njzk2

+0

@ njzk2 nie chodzi o rzucanie. To zadziała ... Spróbuj raz przed oddaniem głosu ... otrzymuję edittext od poziomu aktywności, więc nie będzie żadnego problemu – Pragnani

0

Wewnątrz klasy aktywny, zrobiłem EditText jako statyczne i

EditText ShowDate = (EditText)this.findViewById(R.id.editTextToShowDate); 

on pracował dla mnie.

Więcej here

Powiązane problemy