2017-08-03 10 views
0

Ich habe eine editext und wenn ich etwas Text eingeben und auf Schaltfläche zurück klicken zeigt es ein Dialogfeld fragte mich, ob die Änderungen verwerfen oder nicht, aber ich wollte die Tastatur bei der Erstellung der Aktivität, so dass ich die hinzugefügt folgende Zeile in meinem oncreateview von Fragmenteseltsames Verhalten von AlertDialog

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

jetzt, wenn ich Änderungen in meinem EditText mache den Alertdialog sagen, ob Sie die Änderungen verwerfen wollen nicht angezeigt wird?

Wenn ich die Zeile

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

von meinem onCreateView es entfernen zeigt der Alertdialog.

public class EditorFragment extends Fragment implements android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>, EditorActivity.OnBackPressedListener { 


    private EditText TaskName, DueDate, DueTime; 
private boolean taskChanged = false; 
private View.OnTouchListener onTouchListener = new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      taskChanged = true; 
      return false; 
     } 
    }; 

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_editor, container, false); 
     TaskName = (EditText) view.findViewById(R.id.tasknameedittext); 
     DueDate = (EditText) view.findViewById(R.id.duedateedittext); 
     DueTime = (EditText) view.findViewById(R.id.duetimeedittext); 

    TaskName.setOnTouchListener(onTouchListener); 
     DueDate.setOnTouchListener(onTouchListener); 
     DueTime.setOnTouchListener(onTouchListener); 
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 
@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     getActivity().getMenuInflater().inflate(R.menu.menu_editor, menu); 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.editoractivitydelete: 
       showDeleteConfirmationDialog(); 
       return true; 
      case R.id.editoractivitysave: 
       saveTask(); 

       return true; 
      case android.R.id.home: 
       //up button code 
       if (!taskChanged) { 
        NavUtils.navigateUpFromSameTask(getActivity()); 
        return true; 
       } 
       DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         NavUtils.navigateUpFromSameTask(getActivity()); 
        } 
       }; 

       showUnsavedChangesDialog(onClickListener); 
       return true; 


     } 
     return super.onOptionsItemSelected(item); 
    } 


private void showUnsavedChangesDialog(DialogInterface.OnClickListener onClickListener) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setMessage(R.string.discardchanges); 
     builder.setPositiveButton(R.string.yes, onClickListener); 
     builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       if (dialog != null) { 
        dialog.dismiss(); 
       } 
      } 
     }); 

     AlertDialog alertDialog = builder.create(); 
     alertDialog.show(); 
    } 

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ((EditorActivity) getActivity()).setOnBackPressedListener(this); 
    } 

    //Back Button code 
    @Override 
    public void doBack() { 
     if (!taskChanged) { 
      NavUtils.navigateUpFromSameTask(getActivity()); 
      return; 
     } 

     DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       NavUtils.navigateUpFromSameTask(getActivity()); 
      } 
     }; 

     showUnsavedChangesDialog(onClickListener); 
    } 
} 

Antwort

0

Ich kann nicht von Ihrer Frage erzählen, wie Sie geänderten Zustand feststellen.

Wie wäre es, wenn Sie diese Strategie versuchen.

  1. Speichern Sie den Status des Inhalts von editText in onCreate auf eine Membervariable.
  2. Bei gedrückter Schaltfläche "Zurück" prüfen, ob der aktuelle Inhalt von editText mit der Elementvariablen übereinstimmt, die Sie in Create gespeichert haben.
  3. Wenn sie unterschiedlich sind, verwenden Sie diese Bedingung, um Ihre Methode aufzurufen, um alertDialog anzuzeigen. Ansonsten lassen Sie den Benutzer zurück.

Beispiel den obigen Code mit

public class EditorFragment extends Fragment implements android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>, EditorActivity.OnBackPressedListener { 


    private EditText TaskName, DueDate, DueTime; 
    private String originalTask = ""; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_editor, container, false); 
     TaskName = (EditText) view.findViewById(R.id.tasknameedittext); 
     DueDate = (EditText) view.findViewById(R.id.duedateedittext); 
     DueTime = (EditText) view.findViewById(R.id.duetimeedittext); 
     originalTask = TaskName.getText().toString(); 

    TaskName.setOnTouchListener(onTouchListener); 
     DueDate.setOnTouchListener(onTouchListener); 
     DueTime.setOnTouchListener(onTouchListener); 
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 
@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     getActivity().getMenuInflater().inflate(R.menu.menu_editor, menu); 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.editoractivitydelete: 
       showDeleteConfirmationDialog(); 
       return true; 
      case R.id.editoractivitysave: 
       saveTask(); 

       return true; 
      case android.R.id.home: 
       //up button code 
       if (!taskChanged) { 
        NavUtils.navigateUpFromSameTask(getActivity()); 
        return true; 
       } 
       DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         NavUtils.navigateUpFromSameTask(getActivity()); 
        } 
       }; 

       showUnsavedChangesDialog(onClickListener); 
       return true; 


     } 
     return super.onOptionsItemSelected(item); 
    } 


private void showUnsavedChangesDialog(DialogInterface.OnClickListener onClickListener) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setMessage(R.string.discardchanges); 
     builder.setPositiveButton(R.string.yes, onClickListener); 
     builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       if (dialog != null) { 
        dialog.dismiss(); 
       } 
      } 
     }); 

     AlertDialog alertDialog = builder.create(); 
     alertDialog.show(); 
    } 

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ((EditorActivity) getActivity()).setOnBackPressedListener(this); 
    } 

    //Back Button code 
    @Override 
    public void doBack() { 
     if (!originalTask.equals(TaskName.getText().toString())) 
     { 
      NavUtils.navigateUpFromSameTask(getActivity()); 
      return; 
     } 

     DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       NavUtils.navigateUpFromSameTask(getActivity()); 
      } 
     }; 

     showUnsavedChangesDialog(onClickListener); 
    } 
} 
+0

Ich habe das gleiche getan, indem eine boolean Variable zu prüfen, ob Benutzer den Zustand von EditText geändert haben oder not.Below ist der Code – Pritish

+0

Könnten Sie bitte posten dein Code. Ich hatte nicht genug Karma, um deinen ersten Beitrag zu kommentieren. Dann kann ich weiter assistieren – Stuckzilla

+0

Ich habe den Code über – Pritish