2013-02-25 34 views
8

Tôi mới sử dụng Java và cố gắng tạo hoạt động bằng EditText. Khi tạo, nó tải với ngày hiện tại và khi người dùng chọn EditText, nó sẽ hiển thị DatePicker. Khi người dùng chọn ngày, tôi cần đưa kết quả vào EditText. Tuy nhiên, tôi hiện đang nhận được lỗi sau:Lỗi: "Không thể tạo tham chiếu tĩnh đến phương thức không tĩnh findViewById (int) từ loại Hoạt động"

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

Tôi biết rằng tôi không thể tham chiếu tĩnh đến phương pháp không tĩnh. Tôi đã cố gắng để loại bỏ tất cả các tài liệu tham khảo tĩnh, nhưng điều này đã cho tôi các lỗi khác. Mã của tôi là dưới đây.

Bạn có thể giúp tôi một số mã mẫu về cách tôi có thể thực hiện công việc này không? Lỗi là ở nơi khi tôi cố gắng đưa kết quả vào 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

Khi bạn mới sử dụng java, hãy dành chút thời gian tìm hiểu java rồi bước vào android. Android là một siêu của java. – NewUser

+0

Hãy thử câu trả lời của tôi nó sẽ làm việc – Pragnani

+0

bạn chỉ cần làm cho lớp DatePickerFragment của bạn không tĩnh nên nó được bao gồm trong phạm vi trường hợp MainActivity. – njzk2

Trả lời

14

Edit:

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

này sẽ làm việc ...

+0

Điều này sẽ hoạt động ...... –

+0

không, đọc quesiton. nó không phải về việc đúc, đó là về phạm vi truy cập vào một phương thức. – njzk2

+0

@ njzk2 nó không phải là về đúc. Nó sẽ làm việc .... Hãy thử một lần trước khi đưa ra downvote ... tôi nhận được edittext từ mức độ hoạt động, vì vậy sẽ không có bất kỳ vấn đề – Pragnani

0

Bên trong lớp Hoạt động, tôi đã thực hiện EditText như tĩnh và

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

Nó làm việc cho tôi.

Để biết thêm here

Các vấn đề liên quan