如何实现定时器自动图像幻灯片内的片段?我使用了片段和CustomSwipeAdapter,我不知道在哪里放置定时器使图像自动滑动。它是在片段内部还是在CustomSwipe Adpater中?
这是为了片段:
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);
}
}发布于 2017-09-16 14:58:33
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();
}发布于 2017-09-15 17:28:50
您可以在Fragment中启动一个定时任务。还没有验证这段代码,但它应该可以正常工作。创建您的刷任务:
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);
}
};在您的片段的onCreateView()中,在设置了viewPager、适配器等之后,
task.run();发布于 2019-01-04 22:58:09
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);
}在片段的autoScroll()中调用,在设置视图寻呼机适配器后调用。
viewPager.setAdapter(ViewPagerAdapter)
autoScroll()如果必须在片段之间进行更改,请记住在片段的onDetach()方法中使用cancel timer,如下所示,以避免出现任何问题。
@Override
public void onDetach() {
super.onDetach();
if(timer != null) {
timer.cancel();
timer = null;
}
}希望这能帮上忙。因为我个人在移动到另一个片段并返回到同一个片段时遇到了一个问题,因为在移动到另一个片段之前,我没有取消计时器。
https://stackoverflow.com/questions/46244161
复制相似问题