0

SwipeRefreshLayoutのほとんどのチュートリアルで見つけた方法は次のとおりですが、私には完全にばかげているようです。

動作: 実際に doStuff() を実行する前に、2000 ミリ秒の間リフレッシュ アニメーションを実行します。

私が(明らかに!!)やりたいこと:doStuff()を実行している間にアニメーションを更新してから停止します。タイマー不要!私は何か間違っていますか?インターネットは私にノーと言います...

            view.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    swipeEmptyView.setRefreshing(true);
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            doStuff();
                            swipeEmptyView.setRefreshing(false);
                        }
                    }, 2000);
                }
            });
4

1 に答える 1

1

あなたのコメントに対する応答は、答えでなければなりません。

  1. http 要求のポイントは、バックグラウンドでハードワークを実行することです。これが AsyncTask の設計目的です。そうしないと、Mainthread でネットワーク リクエストを実行するという例外が発生します。詳細については、Google で検索してください。

  2. SwipeRefreshLayout については、mSwipeLayout.setRefreshing(false) を呼び出すまで、ロード アニメーションが自動的に表示されると思います。したがって、ここには 2 種類の実装があります。

2.1 - http リクエストに AsyncTask を使用し、独自の読み込みアニメーションを使用します (SwipeRefreshLayout の有無にかかわらず):

public class MyAsyncTask<DummyStuff> extends AsyncTask<Void, Void, Void> {

    public void onPreExecute() {
        // start your animation here
        // NOTE: if you use SwipeRefreshLayout, it will automatically show animation when you swipe your layout down, so please consider your UX to do what you want.
    }

    public void onDoinBackground(Void... input) {
        // do something
        // http request or something
        return null;    // return what ever you get
    }

    public void onPostExecute(Void... result) {
        // stop your animation here
        // in case you use SwipeRefreshLayout, call mSRL.setRefreshing(false) here too.
    }
}

2.2 SwipeRefreshLayout を使用したタスクの上のユーザー:

重要な部分のみを示します。

mSRL.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        (new MyAsyncTask()).execute();
    }
});

以上は、どこで何をすればよいかの考え方ですので、ご自分で試してみてください。

後でこの回答を実際のサンプルで更新します。しかし、ここでアイデアが得られることを願っています。

于 2015-04-02T00:47:03.430 に答える