在片段中使用带有计时器的AsyncTask

时间:2015-07-05 13:09:11

标签: android android-fragments android-asynctask

我使用Asynctask通过Volley加载数据。我想在n分钟后调用AsyncTask,也许这是重复的,也是一个愚蠢的问题,但我无法想象如何实现它。也许我需要在我的片段中实现AsyncTask?

这是我的AsyncTask.class

package com.aa.qc.callbacks;

import com.aa.qc.pojo.Zlecenia;

import java.util.ArrayList;

public interface ZleceniaLoadedListner {
    public void onZleceniaLoaded(ArrayList<Zlecenia> listZlecenias);
}

这是listner.class

public class FragmentZlecenia extends Fragment implements SortListener, ZleceniaLoadedListner, SwipeRefreshLayout.OnRefreshListener {

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private ArrayList<Zlecenia> listZlecenias = new ArrayList<>();
    private RecyclerView zleceniaArrived;
    private AdapterZlecenia adapterZlecenia;

    private SwipeRefreshLayout mSwipeRefreshLayout;
    private ZleceniaSorter mSorter = new ZleceniaSorter();


    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;


    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment FragmentZlecenia.
     */
    // TODO: Rename and change types and number of parameters
    public static FragmentZlecenia newInstance(String param1, String param2) {
        FragmentZlecenia fragment = new FragmentZlecenia();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    public FragmentZlecenia() {
        // Required empty public constructor
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    public void onSortByTime() {
        L.t(getActivity(), "Sort by time");
        mSorter.sortZleceniaByTime(listZlecenias);
        adapterZlecenia.notifyDataSetChanged();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View layout = inflater.inflate(R.layout.fragment_zlecenia, container, false);

        mSwipeRefreshLayout = (SwipeRefreshLayout) layout.findViewById(R.id.swipeZlecenia);
        mSwipeRefreshLayout.setOnRefreshListener(this);


        zleceniaArrived = (RecyclerView) layout.findViewById(R.id.listZlecenia);
        zleceniaArrived.setLayoutManager(new LinearLayoutManager(getActivity()));

        adapterZlecenia = new AdapterZlecenia(getActivity());
        zleceniaArrived.setAdapter(adapterZlecenia);

        if (savedInstanceState != null) {
            //if this fragment starts after a rotation or configuration change, load the existing zlecenias from DB
            listZlecenias = MyApplication.getWritableDatabase().getAllZlecenia();
        } else {
            //if this fragment starts for the first time, load the list of zlecenias from a database
            MyApplication.getWritableDatabase().deleteAll();
            //if the database is empty, trigger an AsycnTask to download zlecenias list from the web
            if (listZlecenias.isEmpty()) {
                new TaskLoadZlecenia(this).execute();
            }
        }
        //update your Adapter to containg the retrieved zlecenias
        adapterZlecenia.setListZlecenia(listZlecenias);

        return layout;
    }


    @Override
    public void onZleceniaLoaded(ArrayList<Zlecenia> listZlecenias) {

        L.m("onZleceniaLoaded Fragment");

        new TaskLoadZlecenia(this).execute();
        adapterZlecenia.setListZlecenia(listZlecenias);
    }


    @Override
    public void onRefresh() {
        L.t(getActivity(), "onRefresh");
        new TaskLoadZlecenia(this).execute();

    }

}

这是我的片段,我想重复asynctask(我有两个标签的活动,每个标签是一个片段)

onClick()

1 个答案:

答案 0 :(得分:0)

如果你想延迟n秒,你可以像这样使用CountDownTimer类

 new CountDownTimer(n * 1000, n * 1000) {

     public void onTick(long millisUntilFinished) {

     }

     public void onFinish() {
         //invokeAllTheThings!
     }
  }.start();

它会成功:)