2017-11-27 5 views
1

アンドロイドアプリのフラグメントでリフレッシュを実装しようとしています。フラグメントビューをプルすると、リフレッシュアイコンが表示されますが、ビューは決してリフレッシュされません。ここで は、xmlファイル>>>フラグメントをリフレッシュしないようリフレッシュするには

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/pullToRefresh" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     .... 

    </android.support.v4.widget.SwipeRefreshLayout> 

で私の試みであるここに私のフラグメントビューの私はアプリケーションを起動するには、私はxmlファイルに

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_home, container, false); 

     final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) v.findViewById(R.id.pullToRefresh); 

     pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 

      @Override 
      public void onRefresh() { 
       // TODO Auto-generated method stub 

       new Handler().postDelayed(new Runnable() { 
        @Override public void run() { 
         pullToRefresh.setRefreshing(false); 
        } 
       }, 5000); 

      } 
     }); 



     return v; 
    } 

を行っているものを実装するコードの下にあり、リフレッシュアイコンが表示されても、何も起こらないようにドラッグすると、何も起こりません。

+0

フラグメントをリフレッシュするコードはどこにありますか?あなたは何かをする必要があります、断片は自動的にそれ自身をリフレッシュしません。現時点では、リフレッシュアニメーションを表示するだけです。その理由は...リフレッシュアニメーションを表示するだけです。リフレッシュしようとしているものに基づいて、おそらくAPIやそのようなものを呼び出す必要があります。 – Eselfar

+0

私が提供したもの以外のコードはありません。そして、それは今の私の挑戦です – Float

+0

だから、データを更新するコードを 'onRefresh()'に書く必要があります。現時点では、アニメーションの終了を遅らせるだけです。そのため、これがすべての理由です。 – Eselfar

答えて

1

だから、基本的には:

@Override 
    public void onRefresh() { 
     // Do async call or whatever to get the new data 
     // Update your data e.g: 
     // - RecylerView: update the data in your adapter and call 'notifyDataSetChanged' 
     // - fixed views: update the field 
     // Call `pullToRefresh.setRefreshing(false);` 
    } 

EDIT(すべてのデータが実際にリフレッシュされたときを意味します)どのようにそれは常に正しい時刻に呼び出されるため、pullToRefresh.setRefreshing(false)を呼び出すために

@Override 
public void onRefresh() { 
    update(); 
} 

private void update(){ 
    // Get the data synchronously or asynchronously 
    // update the view with the data 
    // then: (remove the code relative to the Handler) 
    pullToRefresh.setRefreshing(false); 
} 
+1

私は単にon refreshメソッドで呼び出される必要のある関数を追加しました。それはそれでした...ありがとう – Float

+0

'pullToRefresh.setRefreshing(false);への呼び出しを遅らせないでください。すべてのデータが更新されました。したがって、同期の場合、これは関数の最後にあるはずです。非同期の場合は、非同期呼び出しのすべての操作が終了するはずです。現時点では5秒後に呼び出されますが、実装によってはデータを更新する時間が多少かかる場合があります。 – Eselfar

+0

私はそれをコメントアウトする必要があることを意味します>>>> pullToRefresh.setRefreshing(false); – Float

0

View v = inflater.inflate(R.layout.fragment_home、container、false);

final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) v.findViewById(R.id.pullToRefresh); 

    final ListView lv = (ListView) v.findViewById(R.id.lv); 
    new (xxx lv).execute(); 

    pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 

     @Override 
     public void onRefresh() { 
      // TODO Auto-generated method stub 

      **You have to write code that you need to perform on refresh calling** 
      new Handler().postDelayed(new Runnable() { 
       @Override public void run() { 
        pullToRefresh.setRefreshing(false); 
       } 
      }, 5000); 

     } 
    }); 



    return v; 
} 

リフレッシュを行う必要がある呼び出し関数のコードはありません。

+0

'pullToRefresh.setRefreshing(false)'を手動で遅延させる必要はありません。すべてのデータが更新され、特定の時間の後ではなく、呼び出されるべきであるからです。 – Eselfar

+0

私はそれを理解していますが、私はその質問者の要件を考えています。だから私はそれをしました。 –

関連する問題