8

Tôi có đoạn hội thoại. Tôi có ý định sử dụng đoạn này trong hoạt động và hộp thoại. Và tôi ghi đè lên phương thức onCreateDialog và onCreateView. đây là mã hóa.AndroidRuntimeException: requestFeature() phải được gọi trước khi thêm nội dung

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.interval_time_popup, null); 
     setup(view, false); 
     return view; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     View view = getActivity().getLayoutInflater().inflate(R.layout.interval_time_popup, null); 

     builder.setTitle("Interval Time"); 
     builder.setView(view); 
     setup(view, true); 
     builder.setPositiveButton("Set", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       listener.setOnIntervalTime(hourNp.getValue(), minNp.getValue()); 
       dismiss(); 
      } 
     }); 
     builder.setNegativeButton("Cancel", new OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       dismiss(); 
      } 
     }); 
     return builder.create(); 
    } 

Tôi sử dụng đoạn này trong lớp hoạt động như vậy.

  SelectTimeIntervalDialogFragment fragment = new SelectTimeIntervalDialogFragment(); 
      fragment.setHrMin(hr, min); 
      Bundle args = new Bundle(); 

      FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
      t.replace(R.id.shift_period_interval_layout, fragment); 
      t.commit(); 

Tôi gọi nó từ một hoạt động khác như vậy.

  if((getResources().getConfiguration().screenLayout & 
          Configuration.SCREENLAYOUT_SIZE_NORMAL) == 
          Configuration.SCREENLAYOUT_SIZE_NORMAL){ 
         Intent intent = new Intent(ShiftPeriodActivity.this, SelectIntervalActivity.class); 
         intent.putExtra("intervalHr", speriod.intervalHr); 
         intent.putExtra("intervalMin", speriod.intervalMin); 
         startActivityForResult(intent, 1); 
        } else { 
         FragmentManager fm = getSupportFragmentManager(); 
         intervalDialog = new SelectTimeIntervalDialogFragment(); 
         intervalDialog.setHrMin(speriod.intervalHr, speriod.intervalMin); 
         intervalDialog.show(fm, "interval_fragment"); 
        } 

Tôi có hai điều kiện. Khi kích thước màn hình là bình thường, nó gọi hoạt động bao gồm hộp thoại phân đoạn. Nếu không, nó sẽ gọi hộp thoại bật lên. Tôi có ngoại lệ khi nó gọi hộp thoại bật lên. Nó nói requestFeature() must be called before adding content. Tôi có thể sử dụng như thế này không? Tôi muốn biết cách vượt qua điều này.

Cảm ơn.

+0

bạn nên được gọi là yêu cầu đầu tiênTính năng trước khi setcontentView() –

+0

Cho dù vấn đề của bạn có được giải quyết không ?? – Subburaj

+2

Có khả năng 'setup()' calls 'requestFeature()' - bạn gọi 'setup()' trong cả hai trong 'onCreateView()' và 'onCreateDialog()'. (Tôi biết, câu hỏi cũ nhưng đã đưa ra trong hàng đợi xem xét.) – laalto

Trả lời

-3

tôi nghĩ bạn đang sử dụng requestWindowFeature(); vào lúc tạo ra

sử dụng nó trước khi setContentView (R.layout.activity);

+0

Tôi đã nhận được ngoại lệ khi tôi gọi hộp thoại bật lên. – user1156041

15

Có vẻ như vấn đề của bạn chính xác giống như mã tôi - tương tự-ish và cùng một ngoại lệ được ném.

Giải pháp là làm những gì @laalto đề xuất: sử dụng onCreateView() hoặc onCreateDialog() nhưng không phải cả hai cùng một lúc. Tôi biết ngoại lệ có thể được gây ra bởi nhiều thứ khác nhau nhưng đây là những gì đã giúp trong trường hợp của tôi; hy vọng nó sẽ giúp người khác trong tương lai :)

+0

nếu bạn cần cả hai phương pháp thì sao? –

+0

Tôi không chắc đó là điều đúng để làm, theo điều này: "Triển khai nên ghi đè lên lớp này và triển khai onCreateView (LayoutInflater, ViewGroup, Bundle) để cung cấp nội dung của hộp thoại. Ngoài ra, chúng có thể ghi đè lênCreateDialog (Bundle) để tạo một hộp thoại hoàn toàn tùy chỉnh, chẳng hạn như một AlertDialog, với nội dung riêng của nó. " (từ: http://developer.android.com/reference/android/app/DialogFragment.html). – JakeP

+1

Liên kết tương tự cũng đề cập: "Thay vì (hoặc ngoài) triển khai onCreateView (LayoutInflater, ViewGroup, Bundle) để tạo phân cấp khung nhìn bên trong hộp thoại, bạn có thể triển khai onCreateDialog (Bundle) để tạo đối tượng Dialog tùy chỉnh của riêng bạn. " Nhưng làm như vậy gây ra sợ hãi "AndroidRuntimeException: requestFeature() phải được gọi trước khi thêm nội dung" Vì vậy, một trong hai tài liệu hoặc API là thiếu sót ... –

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