0

私はデータベース側で膨大なデータを持っており、50行のバッチでサービスを使用してデータを取得し、そのデータをViewPagerフラグメントに入れています。うまくいきましたが、ユーザーがページ50に到達して新しいデータでフラグメントを更新する必要があると、サービスを再呼び出しする必要があります。現在、Android.Support.V4.App.FragmentのnewInstance(文字列メッセージ)メソッドをオーバーライドしてサービスを呼び出しています。ViewPager Xamarinでフラグメントを再ロードする方法

Xamarin Anadroidで新しいデータでフラグメントを動的に更新する方法はありますか?

+0

'パブリック静的MyFragment NewInstanceメソッド(int型playId)'ここxamarinアンドロイドフラグメントで同じ機能です。 –

+0

マイク、そうです。私はこのメソッドを使って新しいフラグメントを開始しました。しかし、私は既にビューのページャにフラグメントがある場合、解決策を探しています。ユーザーが50番目のフラグメントに達すると、別のパラメータで呼び出す方法 – guruitengineer

+0

'fragmentTransaction.Replace(Android.Resource.Id.Content、details);'同じリソースIDを持つフラグメントトランザクションでコール置換とコミット機能。フラグメントをリロードします。 –

答えて

0

特定のビューページのフラグメントを更新します。私はあなたが活動を再現する必要はないと思うか、断片を作り直してください。

adapter.NotifyDataSetChanged()を使用してフラグメントを更新してみてください。

がフラグメントviewpager sepcificを更新するsetpsに従ってください:

1.

class MyHandler : Handler 
     { 
      public override void HandleMessage(Message msg) 
      { 
       if (msg.What == 1) 
       { 
        mainAdapter.NotifyDataSetChanged(); 
       } 
      } 
     } 

2.送信メッセージあなたは50番目のフラグメントに到達

class PageChangeListen : Java.Lang.Object, IOnPageChangeListener 
     { 
      public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
      { 

      } 

      public void OnPageScrollStateChanged(int state) 
      { 

      } 

      public void OnPageSelected(int position) 
      { 
       if (position == 1) 
       { 
        Message msg = new Message(); 
        msg.What = 1; 
        new MyHandler().SendMessage(msg); 
       } 
      } 
     } 
ハンドラを作成します。

3.メインスレッドでは、メッセージをivedフラグメント

public interface Updateable 
    { 
     void update(); 
    } 


    public class MyFragment : Android.Support.V4.App.Fragment, Updateable 
    { 

     TextView questionBox; 
     public MyFragment() { } 

     public static MyFragment NewInstance(String question) 
     { 
      MyFragment fragment = new MyFragment(); 
      return fragment; 
     } 
     public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 
      View view = inflater.Inflate(Resource.Layout.MyFragmentLayout, container, false); 
      questionBox = (TextView)view.FindViewById(Resource.Id.textView1); 
      return view; 
     } 

     public void update() 
     { 
      questionBox.Text = "Mike Update"; 
     } 
    } 

5.フラグメントがコールGetItemPositionによりUIを更新するための更新インタフェースを追加NotifyDataSetChanged

4を呼び出します。私の例では

 public override int GetItemPosition(Object @object) 
      { 
       MyFragment f = (MyFragment)@object; 
       System.Console.WriteLine(f.Id + "" + f.Resources + "" + f.Tag); 
       if (f != null) 
       { 
        f.update(); 
       } 
       return base.GetItemPosition(@object); 
      } 

私は、テキスト「マイク・アップデート」で2ページを更新しています。更新条件と内容を変更することができます。

スクリーンショット:

enter image description here

git source code is here

+0

マイクありがとう、私はこれを探していた。非常に役に立ちます。 – guruitengineer

+0

こんにちはマイク、それは動作しており、私はサービスから新しいデータを読み込むことができます。しかし、断片はリフレッシュされません。手伝っていただけませんか。 – guruitengineer

+0

ハンドラを使用します。フラグメント –

関連する問題