我正在创建一个应用程序,当按下按钮时,它会在“for循环”中生成一些啁啾声,我想在循环过程中阻止按钮,并在循环结束时重新播放。
我尝试了此操作,但应用程序崩溃:
package android.nacho.UltraSoundSender;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class UltraSoundSender extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ultra_sound_sender);
Button btnCode = (Button) findViewById(R.id.btnCode);
btnCode.setOnClickListener(new OnClickListener() {
//@Override
public void onClick(View arg0) {
enableButton(false);
new Thread( new Runnable( )
{
public void run( )
{
//working=false;
// int Code=Integer.parseInt(((EditText)findViewById(R.id.Code)).getText().toString());
//((EditText)findViewById(R.id.Code)).setText("");
String word= ((EditText)findViewById(R.id.Code)).getText().toString();
Integer digits[]= new Integer[64];
int NumChar= word.length();
//This split the string in chars
for(int i = 0; i < NumChar ; i++){
digits[i]=(int)word.charAt(i);
}
//Values of the chirp
int startFreq = 3000;
int endFreq = 7000;
double impulseDuration = 50;
for(int IndexChar= 0; IndexChar< NumChar ; IndexChar++)
{
new ChirpGenerator().playDOWN(startFreq, endFreq, impulseDuration, digits[IndexChar]);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
enableButton(true);
}
} ).start();
}
});
}
//Enable/disable button
private void enableButton(boolean isEnable)
{
((Button)findViewById(R.id.btnCode)).setEnabled(isEnable);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_ultra_sound_sender, menu);
return true;
}
}
我在日志中发现了以下错误:
06-19 11:15:00.852:E/AndroidRuntime(29419):致命异常:Thread-5516 06-19 11:15:00.852:E/AndroidRuntime(29419):android。看法ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。看法ViewRootImpl。checkThread(ViewRootImpl.java:4746)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。看法ViewRootImpl。invalidateChildInParent(ViewRootImpl.java:854)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。看法视图组。invalidateChild(ViewGroup.java:4077)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。看法看法无效(View.java:10322)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。小装置。文本视图。invalidateDrawable(TextView.java:4601)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。可抽出容器。invalidateDrawable(DrawableContainer.java:250)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。可抽出式。invalidateSelf(Drawable.java:338)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。可抽出式。setVisible(Drawable.java:549)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。可抽出容器。选择Drawable(DrawableContainer.java:307)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。StateListDrawable。onStateChange(StateListDrawable.java:106)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。图样可抽出式。可抽出式。设置状态(Drawable.java:465)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。看法看法drawableStateChanged(View.java:14281)06-19 11:15:00.852:E/AndroidRuntime(29419):在android上。小装置。文本视图。drawableStateChanged(TextView.java:3184)
我应该在哪里调用enabale函数?我猜是出格了,但怎么会呢?
是的,可以使用setChecked函数
您需要将按钮更改为ToggleButton,然后
btnCode.setChecked(false);
您的按钮将是可见的,但不能点击治疗后,做
btnCode.setChecked(true);
当您在线程末尾启用按钮(false)时,您希望如何启用按钮?请尝试启用按钮(true),我确信这只是一个输入错误。:)
此外,在您的情况下,只有UI线程可以接触视图,请查看AsyncTask。基本上:
onPreExecute
doInbackground
onPostExecute
您的代码需要一些重构,但它最终会起作用。
当按钮被点击时...直到另外5秒才能点击
btnCode.setOnClickListener(new OnClickListener()
{
public void onClick(final View v)
{
v.setClickable(false);
new Handler().postDelayed(new Runnable()
{
public void run()
{
v.setClickable(true);
}
}, 500);
}
});
用for循环中的估计值替换时间
问题内容: 我正在android studio中构建一个登录样式的应用程序。作为此过程的一部分,我创建了一个规则,如果用于监视无效登录尝试次数的计数器变为0。我目前知道,当计数器变为0时,将禁用登录按钮。我想知道是否有某种方式可以在设定的时间内(而不是无限期)禁用此按钮? 问题答案: 使用以下代码。当您将活动或片段放在OnCreate()方法中时,它将在5秒钟后禁用按钮。
问题内容: 我想在片段类中禁用后退按钮。在此片段中似乎不起作用。如何禁用后退按钮? 这是我的示例代码: 问题答案: 您必须重写父FragmentActivity类的onBackPressed。因此,将您的代码放在父FragmentActivity中。或者,您可以使用以下方法调用父方法: 在FragmentActivity中重写onBackPressed方法,而不调用其超类来禁用后退按钮。
问题内容: 这可能是一个重复的问题,但我没有找到想要的东西。我在UI活动中调用AsyncTask, 在doInBackground中调用需要时间的方法。如果一段时间后没有返回数据,我想中断该线程。以下是我尝试执行此操作的代码。 但这并不能在30秒后停止任务,事实上,这花费了更多时间。我也尝试过,但这也不起作用。 谁能告诉我该怎么做或如何在doInBackground中使用isCancelled()
我正在用OpenFL开发一个android游戏。当我在手机上测试它时,它启动得很好。现在,如果我停用游戏应用程序,并在短时间后返回它,它显示黑屏不到一秒钟,然后返回游戏。 然而,如果游戏应用程序在后台停留大约10分钟,那么如果我再次打开它,它就会显示黑屏,然后游戏在等待15秒之后就会出现,或者它根本就不会出现--只是一个黑屏。(至此,既然我可以下拉通知栏,android就没有冻结了。) 游戏中也有
问题内容: 我从日志文件中获取了一些数据,想按分钟对条目进行分组: df: 我尝试了以下选项: 级别太高,想要汇总。 失败失败。 工作正常,并返回一个对象进行进一步处理,例如: grouped.Source.value_counts() 2012-01-01 12:30:00 source1 1 2012-01-01 12:31:00 source2 2 source1 2 2012-01-01
我正在尝试设置一个通知,使其在某个时间间隔后出现。我本以为这能起作用,但在我的手机上运行代码时,除了在控制台上打印接收器外,似乎什么都没有发生,我似乎不知道为什么。任何帮助都将不胜感激。 这是用于设置警报的代码。 这是notification receiver类 以下是相关清单行,接收者Android:name=“.notificationreceiver”使用权限Android:name=”co