2016-08-31 4 views
0

FragmentPagerAdapterを使用して、それぞれがowフラグメントで表される3つのタブを表示するViewPagerを持っています。これらのフラグメントの1つにリストが含まれています。このリストは、そのタブへの切り替え/スワイプ時に更新する必要があります。しかし、私はそれを実現させる方法を見つけることはありません。 onResumeメソッドを使用してみましたが、フラグメントが一時停止されずにタブの変更が再開されたようです。私が提供するのに使用される私のRecordingServiceクラスにアクセスすることはできませんviewpagerタブのリストビューフラグメントを更新する

@Override 
public void onRefreshed() 
{ 
    List<Record> records = mRecordingService.getRecords(); 

    mRecordAdapter.clear(); 
    mRecordAdapter.add(record); 
} 

しかし、このコードを使用して:私は、次の使用

@Override 
public void onPageSelected(int position) 
{ 
    FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.getItem(position); 
    currentFragment.onRefreshed(); 
} 

とフラグメントに:私もMainActivityViewPager.OnPageChangeListenerを使用してみましたデータベース関数(mRecordingServiceはnullと思われるため)。あなたのMainActivityで

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    mRecordingService = new RecordingService(getContext()); 
} 
+0

'Fragment'には' onRefreshed() 'メソッドがありません。あなたはこのメソッドを '@Override'するためにどのインタフェースを実装していますか? (ここに示した各メソッドが含まれている正確なクラス名を表示するのには多くの助けになります) –

+0

'mRecordAdapter'の宣言は何ですか? –

+0

'record'とは何ですか?それはどこに宣言されていますか?ここで 'records'という名前の変数がありますが、' record'ではありません。 –

答えて

1

onPageChangeListenerを使用することである私は、このようなフラグメントでそれを初期化します正しいWAそれを行うにはy。私はあなたのコードが機能していない理由は、あなたのページャのアダプタでgetItemを呼び出すためです:getItem()実際に新しいフラグメントのインスタンスを返します。現在のインスタンスを取得するには、instantiateItem()(実際に使用されているフラグメントへの参照を返します)を使用します。

はこのような何かを見て、あなたのコードを変更し

@Override 
public void onPageSelected(int position) 
{ 
    FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.instantiateItem(viewPager,position); 
    currentFragment.onRefreshed(); 
} 

そして、それは動作するはずです。

+1

これは私が探していたものです:) –

+0

'onRefreshed()'を直接呼び出すことは解決策ではないと思います。これは、あるインタフェースから実装されたコールバックメソッドのようです。もちろん、このメソッドの名前をカスタム名に変更するだけで、その問題が部分的に解決されます。 –

-1

private FirstFragment firstFragment; 
private WantedFragment wantedFragment; 
private ThirdFragment thirdfragment; 

のgetItem

switch(postition){ 
    //return first, wanted, third fragments depending on position 
} 

onPageSelected:

if(position == 1) // position of the wanted fragment 
wantedfragment.onRefreshed() 
+1

私が期待していた解決策ではありませんが、うまくいきました:-)ありがとうございました。 –

+0

正しく実装されていれば 'ListView'が自動的に更新されるときにコールバックと思われるメソッドを直接呼び出すことに懐疑的です。 –

0

onRefreshed()にあるコードは、代わりにonResume()になることをお勧めします。 FragmentにはonRefreshed()メソッドがありません。このメソッドを宣言する別のインターフェイスを実装する必要があります。

データベースにデータを格納するため、CursorAdapterまたはサブクラス(SimpleCursorAdapter)を使用する必要があります。これを正しく行うと、レコードをデータベースに追加すると、ListViewが自動的に更新されます。その後、サービスはフラグメントからサービスにアクセスすることなくレコードを追加できます。

関連する問題