相关疑难解决方法(0)

Android - 强制语言环境重置方向更改

我尝试将应用程序中的区域设置强制为用户指定的区域设置.由于这可能用于演示,我想在应用程序中更改语言/区域设置,而不是随时为整个设备.

我环顾四周,试着用我在这里找到的每一个提示.结果:我可以使用新语言重新启动测试活动,但如果我更改方向,则区域设置将始终重置为设备.

上传了一个简约的项目,以便您可以重现我的问题.请忽略UI的缩小,这并不重要:)

android locale orientation

18
推荐指数
2
解决办法
1万
查看次数

在Android应用程序生命周期中缓存数据的好方法?

保持我的问题简短,我创建了一个包含3个活动的应用程序,其中A - 类别列表,B - 项目列表,C - 单项.B和C中显示的数据是从在线XML解析的.但是,如果我通过A - > B1 - > C,然后返回A然后再回到B1,我希望将其数据缓存到某处,这样我就不必再次请求XML了.

我是Android和Java编程的新手,我已经搜索了很多东西,但仍然无法找到(或者根本就没有想法去哪看)一种方法来做我想要的.

将所有收到的数据存储在主要活动A(HashMaps?ContentProviders?)中然后传递给B和C(如果他们得到之前的相同请求)是个好主意?

android android-contentprovider

16
推荐指数
1
解决办法
2万
查看次数

Android方向更改调用onCreate

我创建了一个搜索屏幕,其中包含一个用于关键字,过滤器和搜索按钮的选项卡,以及三个用于不同类型结果的可选选项卡(每个包含一个ListView带有a ArrayAdapter).启动活动时,Parcelable[]如果已执行搜索,开发人员可以选择将结果作为额外内容传递.在onCreate()方法中,我正在创建Parcelable[]传递的三个选项卡中的每一个.

当我从过滤器选项卡上的按钮调用搜索时,我清除选项卡并使用新结果重新创建它们,这非常有效.问题是,当您旋转设备时,Android的自动方向切换支持似乎会重新创建整个活动,即调用onCreate().这意味着我的搜索结果将重置为Parcelable[]启动活动时传递的内容.

到目前为止,我唯一的解决方案就是调用finish()然后startActivity()用新结果重新启动活动.我确信必须有一个更简单的解决方案,而且我做了一些非常无趣的事情.

有一个更好的方法吗?

android android-orientation android-activity

14
推荐指数
2
解决办法
2万
查看次数

Android:停止在方向更改时重新创建活动

我有一个listview,在main.xml布局中有两个按钮.点击一个按钮,我动态创建一个textview,并将其添加到屏幕底部以确认用户交互.当用户单击第二个按钮(确认按钮)时,我需要将该文本添加到listview.为了支持横向模式,我在layout-land文件夹中有相同的布局文件.当我点击第一个按钮时,它会创建一个包含一些文本的文本视图,并在屏幕底部添加.现在,如果更改设备方向,则它将加载横向main.xml,并且活动将再次重新创建.所以我的textview正在崩溃.如何防止在方向上重新开展活动.(但它应该选择其他布局文件).

android onconfigurationchanged oncreate android-activity

13
推荐指数
2
解决办法
1万
查看次数

Android:onCreate()被多次调用(而不是我)

有些事情我现在还不太明白.

我的主要活动类创建一个Service,它创建一个等待TCP连接的新线程.一旦进入,它将开始一项新活动:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class);
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress());
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);
Run Code Online (Sandbox Code Playgroud)

之后,onCreate()该类的方法运行.它将创建2个线程:一个记录并发送数据,另一个接收和播放数据.那些线程有一个永远的while循环.

出于某种原因,我注意到onCreate()最后一个类的内容再次被调用,这使我的程序崩溃.我不明白为什么它再次被调用,因为只有2个线程正在运行,没有用户交互.文档说:"首次创建活动时调用.".该活动已在运行,我不是想创建它.

有人可以解释一下这种行为吗?

multithreading android oncreate

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

旋转设备后,onCreate(...)被调用两次

我有关于旋转Android设备的问题.我的代码在onCreate(...)中记录了一个静态和非静态属性.

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    static int sn;
    int n;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        sn++;
        n++;

        Log.i("onCreate", String.format("sn=%d n=%d", sn, n));
    }
}
Run Code Online (Sandbox Code Playgroud)

屏幕方向是纵向.当我第一次运行代码时,我得到了:

onCreate(): sn=1 n=1
Run Code Online (Sandbox Code Playgroud)

在我将屏幕旋转到风景后,我得到了:

onCreate(): sn=2 n=1
Run Code Online (Sandbox Code Playgroud)

在我再次将屏幕旋转为肖像后,我得到了:

onCreate(): sn=3 n=1
onCreate(): sn=4 n=1
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 当设备旋转回肖像时,如何防止onCreate(...)被调用两次?
  2. 如何在旋转设备时保存非静态变量的值?

android

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

Android AutoCompleteTextView以横向模式显示对象信息而不是文本

我正在使用自定义适配器与AutoCompleteTextView.它在模拟器和我的平板电脑上工作正常.但是,我的手机在横向模式下出现问题.在此模式下显示的自动完成提示是对象信息而不是文本.但是,当我选择任何项目时,字段会在相应字段中正确填充文本.

基于Android Stock Array Adapter的其他字段的自动完成工作正常.

我必须在自定义适配器中为此做些什么吗?我在SO上只看到了一个类似的问题.对该问题的一个回答是讨论覆盖toString方法,但我无法理解它在我的代码中实现.

任何指导将不胜感激?如果您需要更多信息,请与我们联系.

编辑:添加了我的自定义适配器源代码....

  public class Part_Mstr_Info
  {
    private long part_id;
    private String name, desg, org, dept;

    public Part_Mstr_Info(long part_id, String name, String desg, String org, String dept)
    {
        this.part_id = part_id;
        this.name = name;
        this.desg = desg;
        this.org = org;
        this.dept = dept;
    }
    public long get_part_id() { return part_id; }
    public String get_name() { return name; }
    public String get_desg() { return desg; }
    public String get_org() { return org; }
    public String get_dept() …
Run Code Online (Sandbox Code Playgroud)

android hints autocompletetextview custom-adapter

11
推荐指数
2
解决办法
6193
查看次数

设备旋转后布局重新开始

我做了一个简单的应用程序,有2个按钮(开始和退出)和一个空的TextView.如果我按下开始按钮,将更新TextView.我的问题是,如果我旋转设备,我的布局将重新启动(如果开始按下,TextView将再次变空.为什么?

java layout android rotation

10
推荐指数
1
解决办法
291
查看次数

屏幕旋转后,Android列表视图消失

在我的布局上,我有一些按钮做出一些选择,然后一个按钮来执行对数据库的查询.此查询的结果显示在ListView此布局中.

问题是如果在我执行查询后旋转屏幕,则ListView消失并且必须再次执行查询.

我相信这种情况正在发生,因为活动重新开始.按照这里的建议,我已经在清单android:configChanges="orientation|keyboardHidden"和我的代码中添加了我的活动:

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.mylayout);

    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

这是我的活动的完整代码:

public class MyClass extends ListActivity implements OnClickListener, OnCheckedChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);

        // Creates the buttons and setOnClickListener and setOnCheckedChangeListener
    }

    @Override
    public void onClick(View v) {

        // Manages the buttons and their functions

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // See what group …
Run Code Online (Sandbox Code Playgroud)

android listview android-activity

9
推荐指数
3
解决办法
2万
查看次数

如何关闭Android中屏幕旋转的BluetoothSocket?

我正在制作一个使用蓝牙连接的应用程序.我打电话蓝牙连接onCreate()和关闭它onDestroy()MainActivity:

// Bluetooth
private Bluetooth bt;
private boolean registered = false;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bt = new Bluetooth(this);
    bt.enableBluetooth();
    bt.setCommunicationCallback(this);
    bt.connectToName(bt.getBluetoothDevice(this));
    IntentFilter filter = new    IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mReceiver, filter);
    registered = true;
}

@Override    
public void onDestroy() {
    super.onDestroy();
    if(registered) {
        unregisterReceiver(mReceiver);
        registered=false;
    }
    bt.removeCommunicationCallback();
    bt.disconnect();
    if (handler != null && runnable != null) {
        handler.removeCallbacks(runnable);
    }
}
Run Code Online (Sandbox Code Playgroud)

该应用程序还支持LANDSCAPE和PORTRAIT模式(使用两种不同的布局).当屏幕旋转时,由于布局不同,MainActivity调用onCreate()onDestroy功能.出于这个原因,我收到以下错误:

@@@ ABORTING: INVALID HEAP ADDRESS …
Run Code Online (Sandbox Code Playgroud)

sockets android bluetooth android-activity android-bluetooth

9
推荐指数
1
解决办法
579
查看次数