2017-05-28 8 views
1

私は3つのタブでアプリケーションを作成しています。私はhereからメモ帳のようなアプリのコードを取得して、私がしたいのは、タブ内の断片にメモ帳を置くことです。私はこれをしましたが、新しいノートを追加するたびにタブに反映されません。私はnotifyDataSetChanged()を使用しなければならないと思うが、私はどこでそれを使うことができるのか難しい。助けていただければ幸いです。TabLayoutのフラグメントを新しいデータで更新するにはどうすればよいですか?

私はタブにFABを入れています。私がそれをクリックすると、アプリはDisplayNoteに行き、元のアプリのようにメモのタイトルと内容を入力することができます。 「保存」をクリックするとメモが保存されるが、タブには表示されないことが確認されている。

これは私のMainActivityに関連するコードです:

public class MainActivity extends AppCompatActivity { 

private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 
    } 
} 

これは、アダプタのコードです:

class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

SectionsPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return new Tab1(); 
     case 1: 
      return new Tab2(); 
     case 2: 
      return new Tab3(); 
     default: 
      return null; 
    } 
} 

@Override 
public int getCount() { 
    // Show 3 total pages. 
    return 3; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position) { 
     case 0: 
      return "Tab 1"; 
     case 1: 
      return "Tab 2"; 
     case 2: 
      return "Notes"; 
     default: 
      return null; 
    } 
} 

そして、これは3番目のタブのためのコードです:

public class Tab3Notes extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.mynotes, container, false); 
    FloatingActionButton add_note; 
    add_note = (FloatingActionButton) rootView.findViewById(R.id.add_note_button); 
    add_note.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Bundle dataBundle = new Bundle(); 
      dataBundle.putInt("id", 0); 
      Intent intent = new Intent(getContext(), DisplayNote.class); 
      intent.putExtras(dataBundle); 
      startActivity(intent); 
     } 
    }); 
    return rootView; 
    } 
} 
+0

それらを再作成だと思います。 'DisplayNote'アクティビティのコードを投稿できますか?このアクティビティは、あなたがすでに持っている 'SectionsPagerAdapter'にどのように関係していますか?私の推測は、 'notifyDatasetChange()'は 'DisplayNote'に置く必要があります。ユーザーが新しいメモを追加することを決定したとき。 –

+0

@DatNguyenコードは、私が提供したリンクから入手できます。 – SSS

答えて

0

あなたSectionsPagerAdapterにこれを追加します。

あなたが notifyDatasetChangedを呼び出すとき
@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

はその後、アダプターは、すべてのページが新しいものと `add_note`ボタンは、最終的に` DisplayNote`アクティビティが表示されます

+0

事は、私は 'notifyDataSetChanged'を使っているはずです。 – SSS

+0

フラグメントを移植するために使用されるリストを更新した後。 –

関連する問題