【发布时间】:2017-12-07 15:06:25
【问题描述】:
我使用记事本应用程序,因为我想尝试 SQLite,但我的智能手机上没有正确的记事本应用程序。
所以我的应用程序由一个 Activity 组成,其中包含一个 Viewpager 和一个用于保存笔记、创建新笔记或删除当前笔记的菜单,以及一个片段,其中是一个简单的 EditText。
我创建了一个自定义对象 Note,它由一个字符串标题、一个字符串内容和一个整数 id 组成,用于将数据保存在 SQLite 上。
所以我的问题是在我的数据库上保存注释的功能。
它从 Activity 的操作栏中的菜单开始,所以当我点击保存按钮(第二个看起来像 SD 卡)时,我从我的片段中调用了一个方法来编辑数据库上的注释像这样:
private void save() {
TabFragment fragment = new TabFragment();
fragment.editNote(arrayListTitle);
}
arraylist 包含每个笔记的标题(我用他来创建 TabLayout),我通过他来获取笔记的标题。
所以有我的片段的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootview = (ViewGroup) inflater.inflate(R.layout.fragment_tab, container, false);
editText1 = rootview.findViewById(R.id.editText1);
manager = new NoteManager(getActivity());
manager.open();
Bundle args = getArguments();
position = args.getInt("0");
arrayListContent = args.getStringArrayList("1");
editText1.setText(arrayListContent.get(position));
return rootview;
}
public void editNote(ArrayList<String> arrayListTitle) {
title_edit = arrayListTitle.get(position);
content_edit = editText1.getText().toString();
Note note = manager.getNote(position + 1);
note.setTitle(title_edit);
note.setContent(content_edit);
manager.modNote(note);
}
当我进入 editNote 方法时,我收到错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: fr.pensebete, PID: 24165
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at fr.pensebete.TabFragment.editNote(TabFragment.java:50)
at fr.pensebete.MainActivity.save(MainActivity.java:130)
at fr.pensebete.MainActivity.onOptionsItemSelected(MainActivity.java:101)
at android.app.Activity.onMenuItemSelected(Activity.java:3369)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:368)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:65)
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202)
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:780)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:963)
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:624)
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:150)
at android.view.View.performClick(View.java:6213)
at android.widget.TextView.performClick(TextView.java:11074)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
我知道它是因为 EditText 没有初始化,因为我只调用了 editNote() 方法并且没有调用 OnCreateView。
如何从 Activity 调用 EditNote() 方法并使 EditText 和变量位置正确初始化(如在 OnCreateView 方法中)?你能帮我吗,因为我搜索了 3 个小时,却没有解决方案让它工作。
感谢您的宝贵时间和帮助,并为我的英语不好感到抱歉。
编辑:在我写这个问题的过程中,我意识到这可能是因为我在 Activity 的方法中做了一个新的 TabFragment:
private void save() {
TabFragment fragment = new TabFragment();
fragment.editNote(arrayListTitle);
}
也许我必须接收或找到已经创建的当前片段,但我不知道该怎么做。帮助 !
【问题讨论】:
-
使用您的片段实例而不是创建新片段。
-
是的,我考虑过,但我该怎么做呢?
-
在下面查看我的答案。
标签: android sqlite android-activity fragment