如何在片段内自动生成图像幻灯片? 我使用Fragment和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);
}
}
答案 0 :(得分:1)
您可以在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,adapter等之后,
task.run();
答案 1 :(得分: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 :(得分:0)
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);
}
在设置视图分页器适配器后调用片段中的onCreateView()中的autoScroll()。
viewPager.setAdapter(ViewPagerAdapter)
autoScroll()
如果您必须在片段之间进行更改,请记住使用片段的 onDetach()方法中的取消计时器,如下所示,以避免出现任何问题。
@Override
public void onDetach() {
super.onDetach();
if(timer != null) {
timer.cancel();
timer = null;
}
}
希望这会对某人有所帮助。由于我本人在移至另一个片段时会遇到滑动问题,并回到同一片段,因为我在移至另一个片段之前没有取消计时器。