2012-04-06 18 views
11

मैंने छवियों और टेक्स्ट को प्रदर्शित करने के लिए एंड्रॉइड व्यू पेजर का उपयोग किया है, जो मैं चाहता हूं कि यदि कोई उपयोगकर्ता छवियों को नहीं बदल रहा है तो इसे कुछ छवियों को स्वचालित रूप से बदलना शुरू करना चाहिए सेकंड और जब उपयोगकर्ता फिर से अपनी उंगली का उपयोग करना शुरू करता है तो छवियों को स्वचालित रूप से नहीं बदला जाना चाहिए?कुछ सेकंड के बाद स्वचालित रूप से पेजर चेंज पेज स्वचालित रूप से

मैंने देरी बनाने के लिए हैंडलर का उपयोग करने की कोशिश की लेकिन यह मेरे लिए काम नहीं किया?

कृपया मदद किसी को भी

public class SimpleImageViewerActivity extends Activity implements ViewPager.OnPageChangeListener{ 
    private Handler handler; 
    ViewPager myPager; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.imageslideshow); 
     MyPagerAdapter adapter = new MyPagerAdapter(); 
     myPager = (ViewPager) findViewById(R.id.slideShowPager); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(0); 

     handler = new Handler(); 
    myPager.setOnPageChangeListener(this); 
    } 

    private class MyPagerAdapter extends PagerAdapter { 

     public int getCount() { 
      return 5; 
     } 

     public Object instantiateItem(View collection, int position) { 

      LayoutInflater inflater = (LayoutInflater) collection.getContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      int resId = 0; 
      switch (position) { 
      case 0: 
       resId = R.layout.farleft; 
       break; 
      case 1: 
       resId = R.layout.left; 
       break; 
      case 2: 
       resId = R.layout.middle; 
       break; 
      case 3: 
       resId = R.layout.right; 
       break; 
      case 4: 
       resId = R.layout.farright; 
       break; 
      } 

      View view = inflater.inflate(resId, null); 

      ((ViewPager) collection).addView(view, 0); 

      return view; 
     } 

     @Override 
     public void destroyItem(View arg0, int arg1, Object arg2) { 
      ((ViewPager) arg0).removeView((View) arg2); 

     } 

     @Override 
     public void finishUpdate(View arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == ((View) arg1); 

     } 

     @Override 
     public void restoreState(Parcelable arg0, ClassLoader arg1) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public Parcelable saveState() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void startUpdate(View arg0) { 
      // TODO Auto-generated method stub 

     } 


    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
     // TODO Auto-generated method stub 

     updateUI(arg2); 
    } 

    @Override 
    public void onPageSelected(int arg0) { 
     // TODO Auto-generated method stub 
     //updateUI(arg0); 

    } 

    public void onNothingSelected(AdapterView<?> adapterView) {  
     final int i =0; 
     adapterView.postDelayed(new Runnable(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       updateUI(i);    
      } 

     }, 5000); 
     Toast.makeText(this, "In nothing selected method",Toast.LENGTH_SHORT).show(); 




    } 

    private void updateUI(final int fi) { 
      /* handler.post(new Runnable() { 
       public void run() { 
        gallery.setSelection(i); 
        viewPager.setCurrentItem(i); 

        //textView.setText("Photo #" + i); 
       } 
      });*/ 
      handler.postDelayed(new Runnable() { 
       public void run() { 
        int i=fi; 
        int j = i; 
        myPager.setCurrentItem(j++); 
        System.out.println("Hello");    

       } 
      },1000); 
     } 


} 
+0

ViewSwitcher के साथ प्रयास के अंदर दो पंक्तियों नीचे कॉल कर सकते हैं। अपने पृष्ठ को डिज़ाइन करें और इसके बाद अपनी विधि को कॉल करें() कुछ सेकंड के बाद .. \ –

+0

क्या आप कृपया एक उदाहरण या कोड स्निपेट दे सकते हैं? –

+0

हे दोस्त, अगर आपको इसकी ज़रूरत है तो मैंने इस परिदृश्य को कार्यान्वित किया है, बस मुझे बताएं कि मैं समाधान पोस्ट करूंगा – krisDrOid

उत्तर

3

उपयोग javautil टाइमर और एक की स्थापना की और टाइमर के अंत में आप

class UpdateTimeTask extends TimerTask { 
    public void run() { 
    //Code for the viewPager to change view 
    } 
} 


// Code to schedule the timer 
timer = new Timer(); 
timer.schedule(new UpdateTimeTask(), 100, 200); 

आशा इस मदद करता है, का उपयोग कर सकते एंड्रॉयड दस्तावेज़ों का उपयोग के लिए सटीक API कॉल

<ViewPager>.setCurrentitem(i++%<MaxViews>) 
+0

का उपयोग करके समाधान पोस्ट कर सकते हैं। कोशिश करें कि क्रिएट (गतिविधि) और java.lang.IllegalStateException: प्रक्रिया के मुख्य धागे से :/ – GuilhE

+0

'stackoverflow' पर यह उत्तर देखें: http://stackoverflow.com/a/17612369/1773155 –

0

जहां तक ​​यूआई अपडेट का संबंध है, आप इसे हैंडलर के माध्यम से कर सकते हैं, तो टाइमरटास्क कक्षा के अंदर एक हैंडलर को कॉल करें, आप सी एक कुछ इस तरह करते हैं:

Timer timer=null; 
static int time_tomove = 0; 

class UpdateTimeTask extends TimerTask { 
     public void run() { 
     //Code for the viewPager to change view 
      System.out.println("The value of the time_tomove "); 
      time_tomove++; 
      Message msg = handler_timer.obtainMessage(); 
      Bundle b = new Bundle(); 
      b.putInt("time", time_tomove); 
      msg.setData(b); 
      handler_timer.sendMessage(msg); 
     } 
    } 




public static Handler handler_timer = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
    magazineHolder.setCurrentItem(time_tomove); 
    } 
}; 

यह करने के बाद आप या तो अपने onresume या OnCreate() विधि

timer = new Timer(); 
     timer.schedule(new UpdateTimeTask(), 100, 2000);