大家早,
我会直接承认,我是开发新手并尝试使用Android.我一直在尝试搜索'网络以找到关于如何实现一些"按钮重复操作"的建议 - 我已经从按钮创建了一个自定义小键盘,并希望有类似退格的行为.到目前为止,我曾经拜访过一位没有编过Android的朋友,但他做了很多C#/ Java,似乎知道他在做什么.
下面的代码工作正常,但我觉得它可以更整齐地完成.如果我错过了比特,我很抱歉,但希望这能解释我的做法.我认为onTouchListener没问题,但处理Threads的方式并不合适.
有没有更好或更简单的方法来做到这一点?
谢谢,
中号
public class MyApp extends Activity {
private boolean deleteThreadRunning = false;
private boolean cancelDeleteThread = false;
private Handler handler = new Handler();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//May have missed some declarations here...
Button_Del.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
handleDeleteDown();
return true;
}
case MotionEvent.ACTION_UP:
{
handleDeleteUp();
return true;
}
default:
return false;
}
}
private void handleDeleteDown() {
if …Run Code Online (Sandbox Code Playgroud) 我遇到过Handler和runOnUiThread概念.但对我来说,它们似乎仍然存在疑问,因为它们确实存在哪些不同之处.
它们都旨在从后台线程执行UI操作.但是,当我们在两种方法中进行选择时,要考虑的因素是什么.
例如,考虑一个Runnable Thread在后台执行Web服务的人,现在我想更新UI.
更新我的UI的最佳方法是什么?我应该去Handler还是runOnUiThread?
我仍然知道我可以使用AsyncTask并使用onPostExecute.但我只想知道其中的区别.
我正在尝试一些值存储在会话从处理程序页面,我做一个重定向到一个页面的WebForms,这将拿起之前会话值和预填的WebForm:
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
...
context.Session["StackOverflow"] = "overflowing";
context.Response.Redirect("~/AnotherPage.aspx");
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
除了context.Sessionobject是null.
如何从处理程序访问会话状态?
我在Android中遇到以下错误的问题:
CalledFromWrongThreadException;:只有创建视图层次结构的原始线程才能触及其视图
它似乎发生在我尝试更新我的Activity中的Textview时,更新TextView的调用来自我的Activity,但我仍然得到上述错误.
我喜欢这样:
onCreate() - 设置按钮和文本视图.
onStateChange() - 一个关于状态更改通知的侦听器,当收到通知时,如果将TextView更改为说一些不同的文本.
当我收到新文本的通知时,我尝试更改TextView,如下所示:
((TextView)findViewById(R.id.title)).setText("Some Text");
Run Code Online (Sandbox Code Playgroud)
但是我得到了上面的错误.
从谷歌搜索它,似乎我应该使用处理程序来更改TextView或使用AsyncTask?
任何人都可以解释哪一个更好用,为什么?
编辑:新增代码片段:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.my);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
((TextView)findViewById(R.id.time)).setText("Hello Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"));
startActivity(dialIntent);
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.FLAG_SOFT_KEYBOARD));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
});
}
Run Code Online (Sandbox Code Playgroud)
//CallBacks from running Service
private final ICallDialogActivity.Stub iCallDialogActivity = new ICallDialogActivity.Stub(){
@Override
public void onStateChanged(int callState)
throws RemoteException {
switch(callState){
case GlobalData.CALL_STATUS_IDLE:
break;
case GlobalData.CALL_STATUS_DISCONNECTING:
byeSetup();
break;
} …Run Code Online (Sandbox Code Playgroud) 在我的应用程序的某些部分,有一个这样的活动结构:

Activity A是我的家庭活动,我在每个流程或流程后回来.
Activity B是一个简单的确认活动.
Activity C是另一项确认活动.
Activity D做一些过程,最后它将结果返回到我的家庭活动(Activity A).
Activity B并且C:
finish()并且什么都不做.finish()我正在考虑使用startActivityForResult()但我从来没有用过它来通过多个活动传递结果.
我还想通过一个handler(创建Activity A)调用一些方法Activity A并执行Activity D...
我怎么能实现它?
请看下面的代码:
public class MyGridFragment extends Fragment{
Handler myhandler = new Handler() {
@Override
public void handleMessage(Message message) {
switch (message.what) {
case 2: {
ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
urls.addAll(theurls);
theimageAdapter.notifyDataSetChanged();
dismissBusyDialog();
break;
}}}};
}
Run Code Online (Sandbox Code Playgroud)
当我使用这样的处理程序时,我得到一个警告"处理程序应该是静态的,否则它容易发生内存泄漏." 有人能告诉我这样做的最佳方法是什么?
我想在关闭JavaFX应用程序之前保存文件.
这就是我在以下方式设置处理程序的方式Main::start:
primaryStage.setOnCloseRequest(event -> {
System.out.println("Stage is closing");
// Save file
});
Run Code Online (Sandbox Code Playgroud)
Stage::close当按下按钮时控制器调用:
@FXML
public void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}
Run Code Online (Sandbox Code Playgroud)
如果我关闭窗口,单击窗口边框上的红色X(正常方式),然后我得到输出消息" Stage is closing",这是所需的行为.
但是,在调用Controller::exitApplication应用程序时关闭而不调用处理程序(没有输出).
如何让控制器使用我添加的处理程序primaryStage?
我是JavaScript和编程的新手,我对对象和事件有一些疑问.
说我有一个对象:
var computer = {
keyboard: {}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一种向键盘对象注册事件的方法:
computer.keyboard.registerEvent( "keyEscape" );
Run Code Online (Sandbox Code Playgroud)
点燃活动:
computer.keyboard.dispatchEvent( "keyEscape" );
Run Code Online (Sandbox Code Playgroud)
并创建事件处理程序:
computer.keyboard.addEventListener( "keyEscape", function() {...} );
Run Code Online (Sandbox Code Playgroud)
我知道如何使用DOM元素而不是对象.这是可以用JavaScript完成的(也许是在JQuery的帮助下)?
即使是最轻微的指导也会受到极大的赞赏.
我想在后台线程中运行一些Runnable.我想使用Handler,因为它很方便延迟.我的意思是
handler.post(runnable, delay);
Run Code Online (Sandbox Code Playgroud)
其中runnable应该在后台 Thread中运行.是否可以创建这样的Handler?在某处有"背景"Looper或者我该如何创建它?
PS我知道如何使用自定义类扩展Thread,但它需要比处理程序方式更多的编码工作.所以请不要发布其他解决方案或类似的东西
handler.post(new Runnable() {
@Override
public void run() {
new Thread() {
@Override
public void run() {
//action
}
}.start();
}
});
Run Code Online (Sandbox Code Playgroud)
如果Handler能够以"干净"的方式做到这一点,我就会徘徊.
我正在尝试使用:
$('mydiv').delegate('hover', function() {
$('seconddiv').show();
}, function() {
//For some reason jQuery won't run this line of code
$('seconddiv').hide();
});
Run Code Online (Sandbox Code Playgroud)