[英]How do I open a Dialog from a fragment in android studio?
我正在android中構建一個應用程序。 我正在嘗試從片段中打開一個對話框 (timeInfoDialog)。 Dialog 已經在其他一些活動上進行了測試並且它正在工作,但是當我嘗試從片段活動中調用它時它崩潰了。
時間信息對話框。
public class timeInfoDialog extends DialogFragment {
defining stuff
private timeInfoDialogListener timeListener;
private TimePickerDialog timePickerDialog;
private Button someButtons;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.layout_add_time_info_dialog, null);
builder.setView(view).setTitle("Select time info").setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String WDO=workDayOpen.getText().toString();
String WDC=workDayClose.getText().toString();
String STO=saturdayOpen.getText().toString();
String STC=saturdayClose.getText().toString();
String SNO=sundayOpen.getText().toString();
String SNC=sundayClose.getText().toString();
timeListener.applyTimeInfo(WDO,WDC,STO,STC,SNO,SNC);
}
});
defining stuff
setOnClickListeners();
return builder.create();
}
private void setOnClickListeners(){
irrelevant
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d("ONATACH:",context.toString());
try{
timeListener = (timeInfoDialogListener) context;
}catch (ClassCastException e){
throw new ClassCastException(context.toString() + "implementing problem at main activity");
}
}
public interface timeInfoDialogListener{
void applyTimeInfo(String WDO, String WDC, String STO, String STC, String SNO, String SNC);
}
}
位置步驟片段
public class LocationStepFragment extends Fragment implements Step, timeInfoDialog.timeInfoDialogListener{
deffining stuff
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.location_step_fragment, container, false);
deffining stuff...
setOnClickListeners();
selectCustomLocationBtn.setEnabled(false);
requestLocationUpdates();
//initialize your UI
return v;
}
@Override
public VerificationError verifyStep() {
//return null if the user can go to the next step, create a new VerificationError instance otherwise
return null;
}
@Override
public void onSelected() {
//update UI when selected
}
@Override
public void onError(@NonNull VerificationError error) {
//handle error inside of the fragment, e.g. show error on EditText
}
private void setOnClickListeners() {
//calling dialog
addTimeInfoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openTimeDialog();
}
});
}
private void requestLocationUpdates(){
not relevant
}
//calling dialog method
public void openTimeDialog(){
timeInfoDialog timeInfoDialog = new timeInfoDialog();
timeInfoDialog.show(getActivity().getSupportFragmentManager(),"timeInfoDialog");
}
//dialog method
@Override
public void applyTimeInfo(String WDO, String WDC, String STO, String STC, String SNO, String SNC) {
Log.d("TimePassed",WDO + " " + WDC + " " + STO +" " + STC + " " + SNO + " " + SNC);
workdayHours = WDO + "-" + WDC;
saturdayHours = STO + "-" + STC;
sundayHours = SNO + "-" + SNC;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
not relevant
}
private boolean isServicesOK(){
not relevant
}
private String getCompleteAddressString(double LATITUDE, double LONGITUDE) {
not relevant
}
我收到以下錯誤它似乎是 OnAttach() 方法中的某種上下文錯誤
2019-07-26 18:23:24.522 9552-9552/com.getodevs.jakov.pocketgourmet D/ONATACH::
com.getodevs.jakov.pocketgourmet.AddMealStepActivity@b2d0c06
2019-07-26 18:23:24.522 9552-9552/com.getodevs.jakov.pocketgourmet D/AndroidRuntime: Shutting down VM
2019-07-26 18:23:24.524 9552-9552/com.getodevs.jakov.pocketgourmet E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.getodevs.jakov.pocketgourmet, PID: 9552
java.lang.ClassCastException: com.getodevs.jakov.pocketgourmet.AddMealStepActivity@b2d0c06implementing problem at main activity
at com.getodevs.jakov.pocketgourmet.timeInfoDialog.onAttach(timeInfoDialog.java:179)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1404)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
Exception
:
java.lang.ClassCastException: com.getodevs.jakov.pocketgourmet.AddMealStepActivity@b2d0c06implementing problem at main activity
拋出表示:
代碼試圖將對象強制轉換為它不是實例的子類。 例如,以下代碼生成 ClassCastException:
Object x = new Integer(0); System.out.println((String)x);
請參閱您的DialogFragmen
onAttach
方法:
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d("ONATACH:",context.toString());
try{
timeListener = (timeInfoDialogListener) context;
}catch (ClassCastException e){
throw new ClassCastException(context.toString() + "implementing problem at main activity");
}
}
在這里,您嘗試將Context
為timeInfoDialogListener
但您的AddMealStepActivity
沒有實現timeInfoDialogListener
。
避免在onAttach
設置 Lisener 並onAttach
使用一種方法:
public void setTimeInfoDialogListener(TimeInfoDialogListener l){
this.timeListener = l;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.