我一直在研究Android SDK平台,有点不清楚如何保存应用程序的状态.因此,考虑到'Hello,Android'示例的这种小型重新设计:
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = new TextView(this);
if (savedInstanceState == null) {
mTextView.setText("Welcome to HelloAndroid!");
} else {
mTextView.setText("Welcome back.");
}
setContentView(mTextView);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这对于最简单的情况就足够了,但无论我如何远离应用程序,它总是以第一条消息响应.
我确信解决方案就像覆盖onPause或类似的那样简单,但我已经在文档中捅了大约30分钟左右,并且没有找到任何明显的东西.
我的程序在后台线程中执行一些网络活动.在开始之前,它会弹出一个进度对话框.该对话框在处理程序上被关闭.这一切都很好,除非在对话框启动时屏幕方向发生变化(后台线程正在运行).此时,应用程序崩溃或死锁,或进入一个奇怪的阶段,在应用程序完全无法工作之前,直到所有线程都被杀死.
如何优雅地处理屏幕方向变化?
下面的示例代码大致匹配我的真实程序:
public class MyAct extends Activity implements Runnable {
public ProgressDialog mProgress;
// UI has a button that when pressed calls send
public void send() {
mProgress = ProgressDialog.show(this, "Please wait",
"Please wait",
true, true);
Thread thread = new Thread(this);
thread.start();
}
public void run() {
Thread.sleep(10000);
Message msg = new Message();
mHandler.sendMessage(msg);
}
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgress.dismiss();
}
};
}
Run Code Online (Sandbox Code Playgroud)
堆:
E/WindowManager( 244): Activity MyAct has …Run Code Online (Sandbox Code Playgroud) 我需要添加一个可以刷新我的Android应用程序的摇动功能.
我发现的所有文档都涉及到实现SensorListener,但Eclipse告诉我它已被弃用并建议SensorEventListener.
谁有一个很好的指导我如何创建这个shake controller?
旋转屏幕时,我根本不需要改变任何东西.我的应用程序显示时,第一次加载和旋转设备应随机图像不选择另一随机图像.我怎样(简单地)让这种行为停止?
我正在开发一个相当复杂的Android应用程序,它需要关于应用程序的大量数据(我说总共大约500KB - 这对于移动设备来说是否很大?).据我所知,应用程序中的任何方向更改(在活动中,更准确地说)会导致活动的完全破坏和重新创建.根据我的发现,Application类没有相同的生命周期(即,所有意图和目的,它总是被实例化).将状态信息存储在应用程序类中然后从Activity引用它是否有意义,或者由于移动设备上的内存限制,这通常不是"可接受的"方法?我真的很感激有关这个主题的任何建议.谢谢!
我正在创建一个Android应用程序,我在画布上绘制视图.当设备的方向改变时,活动将重新开始.我不想要它.
当方向发生变化时,如何避免重新启动活动?
我正在疯狂地弄清楚处理屏幕旋转的最佳方法是什么.我在这里阅读了数百个问题/答案,但我真的很困惑.
如何在重新创建活动之前保存myClass数据,这样我可以保留所有内容以重绘活动而无需另外无用的初始化?
有没有比parcelable更清洁,更好的方法?
我需要处理旋转,因为我想在横向模式下更改布局.
public class MtgoLifecounterActivity extends Activity {
MyClass myClass;
// Called when the activity is first created
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
If ( ?? first run...myClass == null ? ) {
myClass = new MyClass();
} else {
// do other stuff but I need myClass istance with all values.
}
// I want that this is called only first time.
// then in case of rotation of screen, i want to restore …Run Code Online (Sandbox Code Playgroud) 我希望在我的任何活动可见时启动意图,否则我会将其作为通知提出,并由用户触发.
要做出决定,我需要知道我的任何活动是否最重要,我该怎么做?
我们正在开发我们的第一个Android应用程序,到目前为止它是一个非常愉快的体验.它几乎完成,但在发布之前我们有一些考虑因素,主要是关于android软键盘.
我们有几个用于输入数字的 EditText字段.我们希望在用户按下Enter键时捕获事件,并进行一些计算并保存此回调.
问题是我们没有得到固定的事件,因为不同的手机有不同的键盘.有些人有"完成"按钮,我们的HTC手机有"进入"按钮.我们尝试将imeOptions用作'完成',但这对HTC手机没有影响.
我们也知道可以通过按下后退按钮来解除键盘.所以我的问题是,是否有一种可靠的方法可以知道用户何时停止输入或何时隐藏键盘,就像在iphone sdk中的textFieldShouldReturn回调一样(当键盘发生故障时它总是会触发,而不管是什么键导致它去了下)..
换句话说,Android开发人员如何处理软键盘?我在editText onClick()事件上检查KeyEvent.KEYCODE_ENTER并在那里完成我的任务.它正在我的HTC android上工作,但不是我的朋友Nexus手机,它有一个完成按钮而不是输入.甚至没有调用onClick.开发人员如何处理此问题?
编辑:失去了一半的头发,并在这里的一些好朋友的帮助下
我已经尝试了所有的建议,但最后通过使用onEditorActionListener和onKeyListener方法为我做了诀窍.在OnEditorActionListener的onEdit回调中,我检查了KeyCode ACTION_DONE,它确实在带有完成按钮的键盘上调用.在输入onKey的键盘上被调用.在onKey方法中我也检查了KEYCODE_BACK,因此也可以处理硬件反压事件.我还没有找到一个完成的Android设备并且在键盘上输入(严重),我甚至用标志处理了这个案例.感谢@Femi建议onEditorActionListener,感谢所有朋友的帮助.但是我原来问题的答案
问:有没有一种可靠而简单的方法来了解android软键盘辞职(适用于每部手机的回调)
答:不,这里建议的所有方法和其他网站上建议的所有方法都不简单.我认为处理键盘返回键事件是任何操作系统最基本的事情.谷歌,你呢?
我正在使用Intents在我的Android应用程序中切换活动.我将数据放入Intent以用于下一个活动.当我在横向和纵向模式之间切换手机时,从意图传递的值将丢失,我得到NullPointerException.
有人可以告诉我可能有什么问题.
有很多代码可以完全发布.但如果有人需要查看代码的特定部分,我可以在此处发布.
编辑
我解决了状态未被保存的问题.但我遇到的另一个问题是,在方向改变后屏幕上没有任何按钮工作.按下按钮,我在LogCat中收到此警告
02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0
Run Code Online (Sandbox Code Playgroud)
请帮忙.