2013-02-25 18 views
8

Sono nuovo in Java e sto provando a creare un'attività con un EditText. Alla creazione, carica con la data corrente e quando l'utente seleziona EditText, visualizza un DatePicker. Una volta che l'utente seleziona la data, ho bisogno di mettere il risultato in EditText. Tuttavia, attualmente sto ottenendo il seguente errore:Errore: "Impossibile creare un riferimento statico al metodo non statico findViewById (int) dal tipo Attività"

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

So che non posso fare un riferimento statico a un metodo non statico. Ho provato a rimuovere tutti i riferimenti statici, ma questo mi ha dato altri errori. Il mio codice è sotto

Potete aiutarmi con qualche codice di esempio su come posso farlo funzionare? L'errore è a dove quando provo a mettere il risultato in 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

Quando si è nuovi a java si prega di passare un po 'di tempo la comprensione java poi passo in Android. Android è un superset di Java. – NewUser

+0

Prova la mia risposta funzionerà – Pragnani

+0

devi solo rendere la classe DatePickerFragment non statica in modo che sia inclusa nell'ambito dell'istanza MainActivity. – njzk2

risposta

14

Edit:

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

Ciò funzionerà ...

+0

Questo dovrebbe funzionare ... –

+0

no, leggere il quesiton. non si tratta di casting, si tratta di un ambito di accesso a un metodo. – njzk2

+0

@ njzk2 non si tratta di casting. Funzionerà .... Provare una volta prima di dare downvote ... Sto ricevendo l'edittext dal livello di attività, quindi non ci saranno problemi – Pragnani

0

All'interno Classe di attività, ho fatto EditText come statico e

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

ha funzionato per me.

Per ulteriori here

Problemi correlati