次が分からなくて困っています。
私が持っているもの:ビューページャーとその中にいくつかのページがあります。この質問では、それらのうちの 2 つだけが重要です。それらを Fragment1 と Fragment2 と呼びましょう。それらは互いに隣り合っています。Fragment1 には、インターネット (外部データベース) からのデータで満たされたリストビューが含まれています。Fragment2 には単純なボタンが含まれています。
私の目標: Fragment2 のボタンをクリックすると、新しいアイテムが外部データベースに追加されます。この新しいアイテムで Fragment1 のリストビューを更新/更新したいと思います。
私のnotifyDataChanged()
場合は機能しませんが、これまでのところ、すべてのページが再インスタンス化されると確信していました..私の問題をできるだけ明確な方法で紹介するので、私が持っているコードを見てみましょう。これが私のViewPager
アダプターです:
class MyPagerAdapter extends FragmentStatePagerAdapter {
public List<String> fragmentsA;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
fragmentsA = fragments;
}
@Override
public Fragment getItem(int position) {
return Fragment.instantiate(context, fragmentsA.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return mEntries.get(position % CONTENT.length).toUpperCase();
}
@Override
public int getCount() {
return mEntries.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
Fragment1 onCreateView() (まもなく):
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
getData();
View view = inflater.inflate(R.layout.latestapps_tab, container, false);
lw = (ListView) view.findViewById(R.id.lw);
context = getActivity().getApplicationContext();
act = this.getActivity();
m_adapter = new ItemAdapter();
lw.setAdapter(m_adapter);
return view;
}
とアダプターを作成しViewPager
、アダプターを設定してViewPager
から、ビューページャーに Main クラスのフラグメントを入力します。この後、2 つのフラグメントで完全に機能する ViewPager を作成します。
pager = (ViewPager)findViewById( R.id.viewpager );
adapter = new MyPagerAdapter(getSupportFragmentManager());
indicator = (TabPageIndicator)findViewById( R.id.indicator );
pager.setAdapter( adapter );
indicator.setViewPager( pager );
pager.setCurrentItem(INITIAL_PAGE);
pager.setOffscreenPageLimit(3);
//adding fragments to the pager
fragments.add( Fragment1.class.getName());
fragments.add( Fragment2.class.getName());
Fragment1 には、すべてのリスト項目にいくつかのテキストビューを含むリストビューがあります。ロードは完全に機能します。 を作成し、ArrayLists
それらのリストに外部データベースからのデータを入力します。読み込みが完了したら、リストビューにこれらの大量のデータを入力します。Fragment 2でボタンをクリックすると、そのリストビューを更新して、外部データベースからのデータを使用してリストビューに新しい行を作成する必要があります。(もちろん、データベースへの書き込みは機能します)
私の推測では、ArrayLists を更新しないか、Fragment1 を再インスタンス化しない可能性があるため、getDataFromSQL() メソッドは、アプリケーションを終了して再度起動するか、ViewPager でスワイプしすぎて Fragment1 が切り離された場合にのみ回転しません。そのため、Fragment1 を更新または更新できません。誰かがこの質問で助けてくれますか?
編集
Fragment2にメッセージを配信してそれ自体を更新することで、なんとかそれを実現しました。しかし、それが良い解決策であるかどうかはわかりません。より良い方法はありません。つまり、何らかの形でフラグメント全体を更新するだけです。
解決
さて、それは私の怠惰だったに違いないと思いますが、今は解決しました。フラグメントを別のフラグメントから更新したい、またはフラグメント間の接続を作成したいすべての人のために、適切なアプローチを説明します。
ホルダーアクティビティを介してフラグメント間の通信を支援する独自のリスナーを実装する必要があります。これはhttp://developer.android.com/training/basics/fragments/communicating.htmlにあります。非常にシンプルで便利です。
フラグメントを取得する必要がありますが、これも簡単です。ViewPager からフラグメントを取得するこれらの Q はいくつかの受け入れ可能な方法を提供します。私はその
SpareArray
解決策を使用しました。
とにかく助けてくれてありがとう!