How to implement timer into Automatically image slide inside the fragment?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-11 10:36:02

问题


How to implement timer into Automatically image slide inside the fragment? I used Fragment and CustomSwipeAdapter and I dont know where to put the timer to make the images automatically slide. Is it inside the Fragment or in CustomSwipe Adpater?

This is for the Fragment:

public class PrimaryFragment extends Fragment {


    public static ViewPager viewPager1;

    CustomSwipeAdapter adapter;
    public PrimaryFragment() {
        // Required empty public constructor

    }

   private String[] health ={"Abdominal Disorder","Abrasion","Aches","Anxiety","Bruises","Burns or Scalds","Constipation","Coughs" +
            "","Cramps","Diarrhea","Dizziness","Dyspepsia","Epilepsy","Fever","Gastric Problem" +
            "","High Blood Pressure","Hydrophobia","Tonsillitis"};


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



    }

    @Nullable

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       // return inflater.inflate(R.layout.primary_layout,null);
        //((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("First Aid and Survival Tips");



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

        viewPager1 = (ViewPager) rootView.findViewById(R.id.view_pager);
        adapter = new CustomSwipeAdapter(this.getActivity());
        viewPager1.setAdapter(adapter);


        ListView lv = (ListView) rootView.findViewById(R.id.oneListView);
        ArrayAdapter adapter = new ArrayAdapter(this.getActivity(),android.R.layout.simple_list_item_1,health);
        lv.setAdapter(adapter);


        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // Toast.makeText(getActivity(),health[position],Toast.LENGTH_SHORT).show();
                if(position == 0) {
                    Intent intent = new Intent(view.getContext(), abdominal.class);
                    startActivity(intent);
                }
                if(position == 1) {
                    Intent intent = new Intent(view.getContext(), abrasion.class);
                    startActivity(intent);
                }
                if(position == 2) {
                    Intent intent = new Intent(view.getContext(), aches.class);
                    startActivity(intent);
                }
                if(position == 3) {
                    Intent intent = new Intent(view.getContext(), allergies.class);
                    startActivity(intent);
                }
                if(position == 4) {
                    Intent intent = new Intent(view.getContext(), bruises.class);
                    startActivity(intent);
                }
                if(position == 5) {
                    Intent intent = new Intent(view.getContext(), burns.class);
                    startActivity(intent);
                }
                if(position == 6) {
                    Intent intent = new Intent(view.getContext(), constipation.class);
                    startActivity(intent);
                }
                if(position == 7) {
                    Intent intent = new Intent(view.getContext(), coughs.class);
                    startActivity(intent);
                }
                if(position == 8) {
                    Intent intent = new Intent(view.getContext(), cramps.class);
                    startActivity(intent);
                }
                if(position == 9) {
                    Intent intent = new Intent(view.getContext(), diarrhea.class);
                    startActivity(intent);
                }
               // if(position == 10) {
               //     Intent intent = new Intent(view.getContext(), digestive.class);
                 //   startActivity(intent);
              //  }
                if(position == 10) {
                    Intent intent = new Intent(view.getContext(), dizziness.class);
                    startActivity(intent);
                }
                if(position == 11) {
                    Intent intent = new Intent(view.getContext(), dyspepsia.class);
                    startActivity(intent);
                }
                if(position == 12) {
                    Intent intent = new Intent(view.getContext(), epilepsy.class);
                    startActivity(intent);
                }
                if(position == 13) {
                    Intent intent = new Intent(view.getContext(), fever.class);
                    startActivity(intent);
                }
                if(position == 14) {
                    Intent intent = new Intent(view.getContext(), gastric.class);
                    startActivity(intent);
                }
                if(position == 15) {
                    Intent intent = new Intent(view.getContext(), highblood.class);
                    startActivity(intent);
                }
                if(position == 16) {
                    Intent intent = new Intent(view.getContext(), hydrophobia.class);
                    startActivity(intent);
                }
                if(position == 17) {
                    Intent intent = new Intent(view.getContext(), tonsilitis.class);
                    startActivity(intent);
                }
            }
        });
        return rootView;
    }}

CustomSwipeAdapter

 public class CustomSwipeAdapter extends PagerAdapter {
    private int[] image_resource = {R.drawable.one, R.drawable.two, R.drawable.three};
    private Context ctx;
    private LayoutInflater layoutInflater;

    public CustomSwipeAdapter(Context ctx) {
        this.ctx = ctx;
    }

    @Override
    public int getCount() {

        return image_resource.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == (LinearLayout)object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View item_view = layoutInflater.inflate(R.layout.swipe_layout, container, false);
        ImageView imageview = (ImageView) item_view.findViewById(R.id.image_view);
        /*TextView textView = (TextView)  item_view.findViewById(R.id.image_count);*/
        imageview.setImageResource(image_resource[position]);
       /* textView.setText("" + position);*/
        container.addView(item_view);
        return item_view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }

}

回答1:


Handler h = new Handler();
int delay = 15000; //1 second
Runnable runnable;
private int[] pagerIndex = {-1};
@Override
public void onStart() {


    h.postDelayed(new Runnable() {
        public void run() {
           pagerIndex[0]++;
    if (pagerIndex[0] >= adapter.getCount()) {
        pagerIndex[0] = 0;
    }

    viewPager.setCurrentItem(pagerIndex[0]);
            runnable=this;

            h.postDelayed(runnable, delay);
        }
    }
    , delay);

    super.onStart();
}



回答2:


You could start a timed task in you Fragment. Haven't verified this code yet, but it should work fine. Create your swipe task :

final long delay = 2000;
Handler handler = new Handler();
private int[] pagerIndex = {-1};
private Runnable swipeTask = new Runnable() {
    @Override
    public void run() {

        pagerIndex[0]++;
        if (pagerIndex[0] >= adapter.getCount()) {
            pagerIndex[0] = 0;
        }

        viewPager.setCurrentItem(pagerIndex[0]);
        handler.postDelayed(this, delay);
    }
};

And in your fragment's onCreateView(), after the viewPager, adapter etc have been set,

task.run();



回答3:


private int currentPage = 0;
final long DELAY = 1000;//delay in milliseconds before auto sliding starts.
final long PERIOD = 4000; //time in milliseconds between sliding.

private void autoScroll(){
    final Handler handler = new Handler();
    final Runnable Update = new Runnable() {
        public void run() {
            if (currentPage == YourImageList.size()) {
                currentPage = 0;
            }
            viewPager.setCurrentItem(currentPage++, true);
        }
    };

    timer = new Timer(); // creating a new thread
    timer .schedule(new TimerTask() { // task to be scheduled

        @Override
        public void run() {
            handler.post(Update);
        }
    }, DELAY_MS, PERIOD_MS);
}

Call autoScroll() in onCreateView() of your fragment, after your view pager adapter is set.

viewPager.setAdapter(ViewPagerAdapter)
autoScroll()

If you have to change between fragments, remember to cancel timer in onDetach() method of your fragment as shown below to avoid any issues.

 @Override
public void onDetach() {
    super.onDetach();
    if(timer != null) {
       timer.cancel();
        timer = null;
    }
}

Hope this will help someone. Since I personally experienced an issue with sliding when moving to another fragment and coming back to the same fragment since I had not cancel the timer before moving to another fragment.



来源:https://stackoverflow.com/questions/46244161/how-to-implement-timer-into-automatically-image-slide-inside-the-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!