相关疑难解决方法(0)

如何使用保存实例状态保存Android Activity状态?

我一直在研究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分钟左右,并且没有找到任何明显的东西.

android application-state android-activity

2538
推荐指数
26
解决办法
74万
查看次数

当进度对话框和后台线程激活时,如何处理屏幕方向更改?

我的程序在后台线程中执行一些网络活动.在开始之前,它会弹出一个进度对话框.该对话框在处理程序上被关闭.这一切都很好,除非在对话框启动时屏幕方向发生变化(后台线程正在运行).此时,应用程序崩溃或死锁,或进入一个奇怪的阶段,在应用程序完全无法工作之前,直到所有线程都被杀死.

如何优雅地处理屏幕方向变化?

下面的示例代码大致匹配我的真实程序:

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 android-dialog android-activity

515
推荐指数
9
解决办法
23万
查看次数

如何在摇动设备时刷新应用程序?

我需要添加一个可以刷新我的Android应用程序的摇动功能.

我发现的所有文档都涉及到实现SensorListener,但Eclipse告诉我它已被弃用并建议SensorEventListener.

谁有一个很好的指导我如何创建这个shake controller

android accelerometer shake

250
推荐指数
4
解决办法
12万
查看次数

方向更改时不要重新加载应用程序

旋转屏幕时,我根本不需要改变任何东西.我的应用程序显示时,第一次加载和旋转设备应随机图像选择另一随机图像.我怎样(简单地)让这种行为停止?

android

152
推荐指数
7
解决办法
13万
查看次数

使用Android Application类来保存数据

我正在开发一个相当复杂的Android应用程序,它需要关于应用程序的大量数据(我说总共大约500KB - 这对于移动设备来说是否很大?).据我所知,应用程序中的任何方向更改(在活动中,更准确地说)会导致活动的完全破坏和重新创建.根据我的发现,Application类没有相同的生命周期(即,所有意图和目的,它总是被实例化).将状态信息存储在应用程序类中然后从Activity引用它是否有意义,或者由于移动设备上的内存限制,这通常不是"可接受的"方法?我真的很感激有关这个主题的任何建议.谢谢!

android application-lifecycle

109
推荐指数
3
解决办法
7万
查看次数

如何在Android上更改方向时避免重新启动活动

我正在创建一个Android应用程序,我在画布上绘制视图.当设备的方向改变时,活动将重新开始.我不想要它.

当方向发生变化时,如何避免重新启动活动?

android screen rotation

60
推荐指数
7
解决办法
6万
查看次数

处理屏幕旋转而不会丢失数据 - 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-intent android-layout

41
推荐指数
6
解决办法
6万
查看次数

如何检测我的任何活动是否是最前面的并且对用户可见?

我希望在我的任何活动可见时启动意图,否则我会将其作为通知提出,并由用户触发.

要做出决定,我需要知道我的任何活动是否最重要,我该怎么做?

android android-activity

25
推荐指数
1
解决办法
4万
查看次数

知道Android软键盘何时退出的可靠方式(适用于每部手机的回调)

我们正在开发我们的第一个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软键盘辞职(适用于每部手机的回调)

答:不,这里建议的所有方法和其他网站上建议的所有方法都不简单.我认为处理键盘返回键事件是任何操作系统最基本的事情.谷歌,你呢?

events android enter soft-keyboard

24
推荐指数
1
解决办法
9863
查看次数

Android - 在横向和纵向模式之间切换会使Intent失去价值

我正在使用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)

请帮忙.

android landscape-portrait android-orientation

20
推荐指数
3
解决办法
6万
查看次数