2017-12-07 2 views
0

나는 SQLite를 사용하고 싶었고 스마트 폰에 올바른 노트 패드 앱이 없기 때문에 메모장 응용 프로그램에서 작동합니다.프래그먼트의 메소드가 액티비티에서 호출 될 때 EditText를 초기화하는 방법은 무엇입니까?

Screenshot of the app

그래서 내 응용 프로그램은 Viewpager하고, 메모를 저장할 새 메모를 작성하거나 현재 메모를 삭제하기위한 메뉴, 간단한 글고있는 조각을 포함하는 활동으로 구성되어있다.

SQLite에 데이터를 저장하기 위해 문자열 제목, 문자열 내용 및 정수 ID를 구성하는 사용자 정의 개체 노트를 만듭니다.

제 문제는 내 데이터베이스에 메모를 저장하는 기능입니다.

Activity의 Action Bar에있는 메뉴로 시작하기 때문에 Save (SD 카드처럼 보이는 두 번째) 버튼을 클릭하면 내 Fragment에서 메소드를 호출하여 이 같은 데이터베이스 :

private void save() { 
    TabFragment fragment = new TabFragment(); 
    fragment.editNote(arrayListTitle); 
} 

ArrayList의 모든 주 (내가 TabLayout를 만들 그를 사용)와 내가 메모의 제목을 얻을 그를 통과의 제목을 포함합니다. 내가위한 editNote 방법에 갈 때 나는 오류가 나타납니다

@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); 
} 

:

그래서 내 조각의 코드가

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) 

내가 아는을 그것 글고 초기화되지 않기 때문에 내가 때문에 editNote() 메서드 만 호출하고 OnCreateView는 호출되지 않습니다.

어떻게 Activity에서 EditNote() 메서드를 호출하고 EditText 및 변수 위치를 올바르게 (OnCreateView 메서드 에서처럼) 초기화 할 수 있습니까? 3 시간이 지난 지금부터 검색을하면 해결책이 없기 때문에 나를 도와 줄 수 있습니까?

시간과 도움에 감사 드리며, 저의 영어 실력을 유감스럽게 생각합니다. 내가 실현이 질문을 쓰는 동안 나는 내 활동의 방법에 새로운 TabFragment을하기 때문에 어쩌면 그 :

편집

private void save() { 
    TabFragment fragment = new TabFragment(); 
    fragment.editNote(arrayListTitle); 
} 

어쩌면 내가 수신하거나 이미 생성 된 현재의 단편을 발견해야한다,하지만 난하지 않습니다 그렇게하는 법을 아십시오. 도움말!

+0

새 조각을 만드는 대신 조각 인스턴스를 사용하십시오. –

+0

네, 생각해 봅니다. 어떻게 할 수 있습니까? –

+0

내 대답을 참조하십시오. –

답변

0

이 시도 :

getFragmentManager().beginTransaction().replace(R.id.frame, new TabFragment(), "Tag").commit(); 
+0

답장을 보내 주셔서 감사합니다! 이것은 조각 생성을위한 ViewPager 어댑터의 코드입니다 : 'TabFragment tab1 = new TabFragment(); return tab1; }' 조각 관리자를 사용하지 않는 것을 볼 수 있습니다.이 방법으로 태그를 추가 할 수 있습니까? –

0

예를 들어이

https://github.com/codepath/android_guides/wiki/ViewPager-with-FragmentPagerAdapter

를 참조하십시오

private void save() { 
    TabFragment fragment = getFragmentManager().findFragmentByTag("Tag"); 
    fragment.editNote(arrayListTitle); 
} 

태그과 같이 당신이 당신의 조각을 만들 때 사용자가 설정 t에 있는지 확인 액티비티 클래스

public class MainActivity extends AppCompatActivity { 

Adapter adapterViewPager; //Replace with your adapter 
ViewPager vpPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    vpPager = (ViewPager) findViewById(R.id.vpPager); 
    adapterViewPager = new ViewPagerAdapter(getSupportFragmentManager()); 
    vpPager.setAdapter(adapterViewPager); 
} 

private void save() { 
    TabFragment fragment = vPager.getItem(0) //position to which fragment 
    fragment.editNote(arrayListTitle); 
} 
} 

희망!

관련 문제