2013-03-17 23 views
19

có thể chuyển biến ngữ cảnh sang DialogFragment không?chuyển ngữ cảnh làm đối số của DialogFragment

tôi đã sử dụng mã này bên trong hộp thoại để thông qua một chuỗi:

public static ConfirmDialog newInstance(String f) { 
    ConfirmDialog d = new ConfirmDialog(); 

    Bundle args = new Bundle(); 
    args.putString("FILE_NAME", f); 
    d.setArguments(args); 

    return d; 
} 

nhưng tôi không tìm thấy bất kỳ chức năng như putString để thông qua ngữ cảnh. Có thể làm điều đó?

Trả lời

47

bạn DialogFragment có một phương pháp rất tiện dụng để nhận một trường hợp Context:

getActivity() 

Fragment#getActivity() sẽ trở lại trường hợp của các Activity (mà là một Context) rằng Fragment được gắn vào. Sử dụng nó sau khi số onAttach() của Fragment được gọi. Biểu đồ dưới đây minh họa Fragment lifecycle, như bạn có thể thấy, sử dụng getActivity() từ onCreate() đến onDestroy() phải là cuộc gọi hợp lệ.

enter image description here

Để biết thêm thông tin, đọc tài liệu Fragment

4
@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    context=activity; 
} 

Cần sử dụng onAttach phương pháp: cho Fragment thoại

+0

show() phương pháp được gọi là đầu tiên và getActivity() là null. Vậy làm thế nào tôi có thể nhận được bối cảnh sau đó? – ralphgabb

0

sử dụng như thế này:

public class Dialog extends DialogFragment implements OnClickListener { 
    public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.message: { 
      this.startActivity(new Intent(context, Login.class)); 
           //or use getActivity() instead of context 
      } 
      break; 
     } 
    } 
    @Override 
    public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     super.onAttach(activity); 
     context=activity; 
    } 
} 
0

onAttach (Hoạt động hoạt động) hiện đang bị phản đối,

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 


sử dụng onAttach (Context ngữ cảnh) thay

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
} 
Các vấn đề liên quan