我正在研究Android测验.我想在ImageVIEw中添加计时器.在问题XML中,我想从“播放时的欢迎XML”按钮调用CountDownTimer.我只是通过在ImageVIEw中添加这样的行来设置Question xml中的onClick
In Question XML
<TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_above="@+ID/question" androID:layout_centerHorizontal="true" androID:background="@drawable/timer_bttn" androID:onClick="onClick"/>
In Welcome xml
<button androID:text="Play" androID:ID="@+ID/playBtn" androID:layout_wIDth="80dip" androID:layout_alignParentRight="true" androID:layout_height="wrap_content" androID:paddingtop="5dip" androID:paddingBottom="5dip" androID:textcolor="#ffffff" androID:background="@drawable/start_button" />
then i created TimerActivity
public class TimerActivity extends Activity implements OnClickListener {private button startB;public TextVIEw text;@OverrIDepublic voID onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVIEw(R.layout.question);startB = (button) this.findVIEwByID(R.ID.playBtn);startB.setonClickListener((OnClickListener) this);text = (TextVIEw) findVIEwByID(R.ID.textVIEw1);}@OverrIDepublic voID onClick(VIEw v) { new CountDownTimer(30000, 1000) { // adjust the milli seconds here public voID onTick(long millisUntilFinished) { text.setText(""+String.format("%d min, %d sec", TimeUnit.MILliSECONDS.toMinutes( millisUntilFinished), TimeUnit.MILliSECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILliSECONDS.toMinutes(millisUntilFinished)))); } public voID onFinish() { text.setText("done!"); } }.start();} }
在这段代码中,我刚刚编写了计时器的代码来调用Image并在TimerActivity中实现代码.但是当我单击播放按钮时,我的计时器无法启动.我的播放按钮在不同的Activity中起作用.
我的logCat:-
!ENTRY org.eclipse.ui 4 0 2013-09-02 17:19:38.741!MESSAGE Unhandled event loop exception!STACK 0java.lang.IllegalArgumentException: Widget has the wrong parent at org.eclipse.swt.SWT.error(SWT.java:4342) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.SWT.error(SWT.java:4247) at org.eclipse.swt.Widgets.Widget.error(Widget.java:468) at org.eclipse.swt.Widgets.Control.setMenu(Control.java:3462) at com.androID.ddmuilib.logcat.LogCatPanel.handleEvent(LogCatPanel.java:1042) at org.eclipse.swt.Widgets.Eventtable.sendEvent(Eventtable.java:84) at org.eclipse.swt.Widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.Widgets.Widget.sendEvent(Widget.java:1077) at org.eclipse.swt.Widgets.Widget.sendEvent(Widget.java:1062) at org.eclipse.swt.Widgets.Widget.showMenu(Widget.java:1472) at org.eclipse.swt.Widgets.Widget.wmContextMenu(Widget.java:1574) at org.eclipse.swt.Widgets.Control.WM_CONTEXTMENU(Control.java:4673) at org.eclipse.swt.Widgets.table.WM_CONTEXTMENU(table.java:5972) at org.eclipse.swt.Widgets.Control.windowProc(Control.java:4532) at org.eclipse.swt.Widgets.table.windowProc(table.java:5913) at org.eclipse.swt.Widgets.display.windowProc(display.java:4989) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2440) at org.eclipse.swt.Widgets.table.callWindowProc(table.java:564) at org.eclipse.swt.Widgets.table.callWindowProc(table.java:430) at org.eclipse.swt.Widgets.Widget.wmRbuttonUp(Widget.java:2395) at org.eclipse.swt.Widgets.Control.WM_RbuttonUP(Control.java:5134) at org.eclipse.swt.Widgets.Control.windowProc(Control.java:4596) at org.eclipse.swt.Widgets.table.windowProc(table.java:5913) at org.eclipse.swt.Widgets.display.windowProc(display.java:4989) at org.eclipse.swt.internal.win32.OS.dispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.dispatchMessage(OS.java:2546) at org.eclipse.swt.Widgets.display.readAnddispatch(display.java:3756) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1053) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) at org.eclipse.ui.internal.Workbench.run(Workbench.java:588) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.IDe.application.IDEApplication.start(IDEApplication.java:124) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(UnkNown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(UnkNown Source) at java.lang.reflect.Method.invoke(UnkNown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
提前致谢
解决方法:
我认为您的计时器实现没有任何问题
但是你有这个
text = (TextVIEw) this.findVIEwByID(R.ID.button1);
你有这个
<ImageVIEwandroID:ID="@+ID/button1"
所以应该
<TextVIEwandroID:ID="@+ID/textVIEw1"
和
text = (TextVIEw) findVIEwByID(R.ID.textVIEw1);
请尝试以下.点击按钮,计时器开始计时.
public class MainActivity extends Activity implements OnClickListener {private button startB;public TextVIEw text;@OverrIDepublic voID onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVIEw(R.layout.activity_main);startB = (button) this.findVIEwByID(R.ID.button1);startB.setonClickListener((OnClickListener) this);text = (TextVIEw) findVIEwByID(R.ID.textVIEw1);}@OverrIDepublic voID onClick(VIEw v) { new CountDownTimer(30000, 1000) { // adjust the milli seconds here public voID onTick(long millisUntilFinished) { text.setText(""+String.format("%d min, %d sec", TimeUnit.MILliSECONDS.toMinutes( millisUntilFinished), TimeUnit.MILliSECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILliSECONDS.toMinutes(millisUntilFinished)))); } public voID onFinish() { text.setText("done!"); } }.start();} }
检查此链接
对于1.5以下的Java版本或不完全支持TimeUnit类的系统,可以使用以下公式:
int seconds = (int) (milliseconds / 1000) % 60 ;int minutes = (int) ((milliseconds / (1000*60)) % 60);int hours = (int) ((milliseconds / (1000*60*60)) % 24);
编辑:
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" > <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParenttop="true" androID:layout_centerHorizontal="true" androID:layout_margintop="35dp" androID:text="TextVIEw" /> <button androID:ID="@+ID/button1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignleft="@+ID/textVIEw1" androID:layout_below="@+ID/textVIEw1" androID:layout_margintop="68dp" androID:text="button" /></relativeLayout>
总结 以上是内存溢出为你收集整理的java-如何在Android测验中实现计时器?全部内容,希望文章能够帮你解决java-如何在Android测验中实现计时器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)