2017-05-11 87 views
0

在我的ListView我已經srno,名稱,按鈕和countdowntimer.Button可以在倒數計時器finished.All工作fine.But問題可以點擊刪除不工作是當接近我的應用程序和再次打開倒計時器從頭開始重新啓動。我希望倒計時器運行,即使我關閉我的應用程序。我已經卡在這裏從過去3天任何人都可以給我確切的代碼plz.Following是我的代碼 -倒數計時器,當應用程序從背景

Second的.java

public class Second extends Activity{ 

TextView txtsrno,txtflower,txtstatus,txttimeleft; 
    ListView listView; 
    ArrayList<Model> flowerlist; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 
     txtsrno = (TextView) findViewById(R.id.srno); 
     txtflower = (TextView) findViewById(R.id.name); 
     txtstatus = (TextView) findViewById(R.id.buy); 
     txttimeleft=(TextView)findViewById(R.id.remtime); 


       listView = (ListView) findViewById(R.id.list); 
       flowerlist = new ArrayList<>(); 

       flowerlist.add(new Model(1, "Rose",System.currentTimeMillis() + 1800000)); 
       flowerlist.add(new Model(2, "Sunflower",System.currentTimeMillis() + 10000)); 
       flowerlist.add(new Model(3, "Lotus",System.currentTimeMillis() + 30000)); 
       flowerlist.add(new Model(4, "Jasmine",System.currentTimeMillis() + 600000)); 

       SecondCustom sc = new SecondCustom(this, flowerlist); 
       listView.setAdapter(sc); 


      } 
} 

SecondCustom.java

public class SecondCustom extends BaseAdapter { 
    Activity a; 
    ArrayList<Model> flowerlist; 
    private List<Viewholder> lstHolders; 
    long timeDiff; 



    private Handler mHandler = new Handler(); 
    private Runnable updateRemainingTimeRunnable = new Runnable() { 
     @Override 
     public void run() { 
      synchronized (lstHolders) { 
       long currentTime = System.currentTimeMillis(); 
       for (Viewholder holder : lstHolders) { 
        holder.updateTimeRemaining(currentTime); 
       } 
      } 
     } 
    }; 


    public SecondCustom(Activity a, ArrayList<Model> flowerlist) { 
     this.a = a; 
     this.flowerlist = flowerlist; 
     lstHolders = new ArrayList<>(); 
     startUpdateTimer(); 
    } 


    private void startUpdateTimer() { 
     Timer tmr = new Timer(); 
     tmr.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       mHandler.post(updateRemainingTimeRunnable); 
      } 
     }, 1000, 1000); 
    } 


    @Override 
    public int getCount() { 
     return flowerlist.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return flowerlist.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 


public class Viewholder { 
     TextView srno, name, ltime; 
     Button buy; 
     Model mModel; 


     public void setData(Model item) { 
      mModel = item; 
      name.setText(item.name); 
      updateTimeRemaining(System.currentTimeMillis()); 
     } 

     public void updateTimeRemaining(long currentTime) { 
      timeDiff = mModel.expirationTime - currentTime; // Changes -- remove long 
      if (timeDiff > 0) { 
       int seconds = (int) (timeDiff/1000) % 60; 
       int minutes = (int) ((timeDiff/(1000 * 60)) % 60); 
       int hours = (int) ((timeDiff/(1000 * 60 * 60)) % 24); 
       ltime.setText(hours + ":" + minutes + ":" + seconds); 

       buy.setClickable(false); 

      } else { 
       buy.setClickable(true); 
       ltime.setText("Buy Now!!"); 
       buy.setBackgroundColor(Color.parseColor("#e72929")); 
      } 
     } 
    } 

    @Override 
    public View getView(final int i, View convertView, ViewGroup viewGroup) { 
     Viewholder viewholder = null; 
     if (convertView == null) { 
      viewholder = new Viewholder(); 
      LayoutInflater li = a.getLayoutInflater(); 
      convertView = li.inflate(R.layout.secondcustom, viewGroup, false); 
      viewholder.srno = (TextView) convertView.findViewById(R.id.sr); 
      viewholder.name = (TextView) convertView.findViewById(R.id.flow); 
      viewholder.buy = (Button) convertView.findViewById(R.id.st); 
      viewholder.ltime = (TextView) convertView.findViewById(R.id.lefttime); 
      convertView.setTag(viewholder); 
      synchronized (lstHolders) { 
       lstHolders.add(viewholder); 
      } 
     } else { 
      viewholder = (Viewholder) convertView.getTag(); 
     } 

     viewholder.setData((Model) getItem(i)); 


     final Model model = flowerlist.get(i); 
     viewholder.srno.setText(valueOf(flowerlist.get(i).getSr())); 
     viewholder.name.setText(valueOf(flowerlist.get(i).getName())); 
     viewholder.ltime.setText(valueOf(flowerlist.get(i).getExpirationTime())); 



     viewholder.buy.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(a, "Purchased" + " " + flowerlist.get(i).getName(), Toast.LENGTH_LONG).show(); 
      } 
     }); 


     return convertView; 
    } 
} 
+0

我已經看到了與服務的例子,但他們已經在他們的主要page.But實現,因爲我在SecondCustom頁想要無法理解如何實現它。 – Neha

+0

無我不想暫停,然後應用程序被打開again.I時候開始就希望時間必須保持,即使應用程序被關閉運行。 – Neha

回答

0

但問題是,當閉上我的應用程序,從開始再次打開它倒數計時器重新啓動。

這是一個正常的活動工作流程,它在您再次啓動時(關閉後)重新創建。

即使關閉我的應用程序,我也想讓倒計時器運行。

那麼,你將需要一個服務或AlarmManager。但請記住,當您的應用程序處於後臺時,您無法觸摸其用戶界面。

對於你來說最好的辦法可能是保存你的活動狀態,當它被放置到後臺並且當它再次顯示時恢復,這是當用戶在應用之間切換時保存和恢復UI狀態的一種方式:see here

+0

它可以通過服務來實現,但我不知道該怎麼做it.Can有人給我確切的代碼爲我的新Android中。 – Neha

+0

您是否嘗試過尋找'「Android的服務例如」'? SO在這裏可以幫助您解決特定的編程問題,而不是爲您編寫整個代碼塊。 – Denny

+0

在您的服務中創建一個線程,並在其中完成(僞代碼)while(!done){sleep(1000);/*每1s做一些工作* /}。但是服務可以被系統殺死,但只有在特定情況下。 AlarmManager應該更可靠。 – marcinj

0

保存退出應用程序的時間 - 當您再次啓動應用程序時,查看保存的時間,查看從那時起經過了多少時間(使用System.currentTimeMillis())並相應地更新您的計時器。

+0

我怎麼能實現它從過去3天內被困在這裏我code.Can任何人給我確切的代碼plz.Have :( – Neha

相關問題