フォームのハードウェア「戻る」ボタンが正しく機能しません。たとえば、フラグメントを開いたときに入力を開始しなかったときに、ハードウェアの「戻る」ボタンを押すと、その機能が優れています。しかし、私が入力を開始した後、ハードウェアの "戻る"ボタンを押すと、エラーログなしでクラッシュしました。edittextで入力した後にハードウェア「戻る」ボタンが機能しない
私のフォームフラグメント
public class D_Category_Login extends Fragment implements View.OnClickListener{
public static FragmentListItemClick fragmentListItemClick;
EditText edt_name,edt_lastname,edt_phone,edt_pass1,edt_pass2;
String name="";
DBHelper dbHelper;
public static final String REGISTER_URL = "http://admin.unimax.kz/api/Klientapi/AddClient?";
public static final String KEY_USERNAME = "first_name";
public static final String KEY_LASTNAME = "last_name";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.form_login, null);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Регистрация");
edt_name = (EditText) view.findViewById(R.id.edt_firstname);
edt_lastname = (EditText) view.findViewById(R.id.lastname);
edt_phone = (EditText) view.findViewById(R.id.login);
edt_pass1 = (EditText) view.findViewById(R.id.pass);
edt_pass2 = (EditText) view.findViewById(R.id.pass_repeet);
Button btn_submit = (Button) view.findViewById(R.id.btn_submit);
TextView tv_number = (TextView) view.findViewById(R.id.tv_number);
btn_submit.setOnClickListener(this);
tv_number.setOnClickListener(this);
edt_phone.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
if(!s.toString().contains("+7 ")){
edt_phone.setText("+7 ");
Selection.setSelection(edt_phone.getText(), edt_phone.getText().length());
}
}
});
return view;
}
void setfragmentclick(FragmentListItemClick fr){
fragmentListItemClick = fr;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_submit:{
if (edt_name.getText().toString().trim().isEmpty() || edt_lastname.getText().toString().trim().isEmpty()){
if (edt_name.getText().toString().trim().isEmpty()) {
edt_name.setError("Заполните это поле");
requestFocus(edt_name);
}
if (edt_lastname.getText().toString().trim().isEmpty()) {
edt_lastname.setError("Заполните это поле");
requestFocus(edt_lastname);
}
}
else {
CheckInternet();
}
}
break;
case R.id.tv_number:{
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + "+77079300066"));
startActivity(intent);
}
break;
}
}
void CheckInternet(){
if (isOnline()){
registerUser();
}
else {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
alertDialogBuilder.setMessage("Проверьте подключение к Интернету");
alertDialogBuilder.setPositiveButton("Закрыть", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
void registerUser(){
final String first_name = edt_name.getText().toString().trim();
final String last_name = edt_lastname.getText().toString().trim();
String fill_url = REGISTER_URL+"familia="+Uri.encode(last_name)+"&name="+Uri.encode(first_name);
StringRequest stringRequest = new StringRequest(Request.Method.POST, fill_url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dbHelper = new DBHelper(getContext());
final ContentValues cv = new ContentValues();
final SQLiteDatabase db = dbHelper.getWritableDatabase();
name+= String.valueOf(edt_name.getText()+" "+String.valueOf(edt_lastname.getText()));
cv.put("id_user", Integer.valueOf(response));
cv.put("name", name);
db.execSQL("delete from form_login");
db.insert("form_login",null, cv);
db.close();
dbHelper.close();
getFragmentManager().popBackStack();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(),"Ошибка сервера"+error.toString(),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
requestQueue.add(stringRequest);
}
private void requestFocus(View view) {
if (view.requestFocus()) {
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
}
マイフォームフラグメントは、子断片です。そして、この親フラグメントで私はバックアクションを実装します。
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
backAction();
return true;
}
return false;
}
});
}
public void backAction() {
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
getChildFragmentManager().popBackStack();
}
else {
((MainActivity) getActivity()).setCurrentItem(0, true);
}
}