2012-10-29 38 views
16

Vì vậy, tôi đang cố gắng bật datepicker cho các phiên bản Android dưới 11 tuổi. Tôi đang sử dụng thư viện hỗ trợ v4. Tôi nhập khẩu tất cả các điều cần thiết:Phương thức 'getSupportFragmentManager()' chưa được loại trừ

import android.support.v4.app.*; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.DialogFragment; 

Và tôi đã tạo ra một lớp:

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.widget.EditText; 
public class DatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

public EditText textField; 

@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); 
} 


public EditText getTextField() { 
return textField; 
} 


public void setTextField(EditText textField) { 
this.textField = textField; 
} 


public void onDateSet(DatePicker view, int year, int month, int day) { 
textField.setText(day+"."+(month+1)+"."+year); 
} 

@Override 
public void onDateSet(android.widget.DatePicker arg0, int arg1, int arg2,int arg3) { 
textField.setText(arg3+"."+(arg2+1)+"."+arg1); 
} 
} 

Vì vậy, lớp biên dịch ok. Nhưng vấn đề là khi tôi cố gắng sử dụng nó. Tôi có một phương pháp onclick cho EditText trông như thế:

public void showDatePicker(View v) { 
    DialogFragment selectDate = (DialogFragment) new DatePicker(); 
    EditText edit=(EditText)v; 
    ((DatePicker) selectDate).setTextField(edit); 
    selectDate.show(getSupportFragmentManager(), "datePicker"); 
} 

tuy nhiên trong dòng cuối cùng tôi nhận được lỗi:

The method getSupportFragmentManager() is undefined for the type MainActivity 

Bất kỳ ý tưởng làm thế nào để giải quyết đó? bất cứ điều gì btw tôi không có nhập khẩu như

android.app.Fragment; 

Vì vậy, đó không phải là trường hợp ở đây: S

+0

Bạn thực sự phải chấp nhận câu trả lời cho những người khác chỉ ra rằng đây là một vấn đề được giải quyết –

+0

Vì vậy, tôi đã làm, may mắn là tôi đang trôi qua mà bây giờ: D – gabrjan

Trả lời

63

đoán của tôi là MainActivity của bạn không được mở rộng FragmentActivity! Trong SupportPackage một Activity phải kế thừa từ FragmentActivity để lấy các phương thức như getSupportedFragmentManager().

EDIT:

Kể từ khi hoạt động của bạn được kế thừa từ một lớp khác, bạn có thể cố gắng thực hiện hành vi của một trong các lớp này và loại hợp nhất chúng. Ví dụ ở đây bạn sẽ tìm thấy mã cho FragmentActivity: FragmentActivity Source

+0

wow đó là sự thật nhưng Tôi đang hoạt động được mở rộng SherlockMapActivity, và kể từ khi java chỉ cho phép mở rộng một hoạt động tôi không có ý tưởng làm thế nào để sửa chữa đó: S – gabrjan

+3

@gabrjan: Bạn không thể dễ dàng sử dụng các mảnh của gói hỗ trợ Android với tiện ích SDK SDK. Do đó, AFAIK, 'SherlockMapActivity' chỉ hoạt động trên API Level 11+ và kế thừa từ' MapActivity', vì vậy bạn sẽ sử dụng 'getFragmentManager()', không phải 'getSupportFragmentManager()'. – CommonsWare

+0

cũng không đúng sherlockmapActivity hoạt động tốt trên api cấp 8 ... kể từ khi tôi đã thử nó và nó chỉ làm việc ok. – gabrjan

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