当用户单击backpressed时,有什么方法可以分段调用saveNote()?

时间:2019-04-26 17:19:25

标签: java android android-fragments fragment

我在片段中有一个保存菜单选项,用于保存用户数据,我也想在片段中反压缩时保存数据?如何实现?

这是我的saveMethod:

 public void saveNote() {
        title = edit_title.getText().toString().trim();
        text = txtnote2.getText().toString().trim();
        if (title.isEmpty()) {
            Toast.makeText(getActivity(), "Please enter a title", Toast.LENGTH_SHORT).show();
        }

        else if (!text.isEmpty() || !title.isEmpty()) {
            long date = new Date().getTime(); // get current time;

            if (temp == null) {
                temp = new Note(title, text, date,activityName);
                dao.insertNote(temp); //inserts note record to db;
            } else {
                temp.setNoteTitle(title);
                temp.setNoteText(text);
                temp.setNoteDate(date);
                temp.setActivityName(activityName);
                dao.updateNote(temp);
            }
            Toast.makeText(getActivity(), "Saved!!", Toast.LENGTH_SHORT).show();
            // finish(); //return to main activity
            getActivity().startActivity(new Intent(getActivity(),MainActivity.class));
            getActivity().finish();
        }
    }

我想在片段中回压此方法 该怎么办?

2 个答案:

答案 0 :(得分:1)

要告诉片段何时按下后退按钮,首先需要一个基础片段,所有其他片段都将从中继承。该基本片段实现了以下内容:

 public interface OnBackPressed {
        void onBackPressed();
    }

    public class BaseFragment extends Fragment implements OnBackPressed {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return super.onCreateView(inflater, container, savedInstanceState);
        }

@Override
public void onBackPressed() {
     // do what you want to save
       saveNote()}
    }

现在在您的托管活动中,在弹出任何片段之前调用接口的所有实现:

@Override
    public void onBackPressed() {
        saveData()
        super.onBackPressed();
    }

    private void saveData(){
        List<Fragment> fragments = getSupportFragmentManager().getFragments();
        for(Fragment f : fragments){
            if(f != null && f instanceof BaseFragment)
                ((BaseFragment)f).onBackPressed();
        }
    }

答案 1 :(得分:0)

您尝试过吗:

public class BaseFragment extends Fragment {
   /**
    * Could handle back press.
    * @return true if back press was handled
    */
   public boolean onBackPressed() {
       return false;
   }
}