我尝试将应用程序中的区域设置强制为用户指定的区域设置.由于这可能用于演示,我想在应用程序中更改语言/区域设置,而不是随时为整个设备.
我环顾四周,试着用我在这里找到的每一个提示.结果:我可以使用新语言重新启动测试活动,但如果我更改方向,则区域设置将始终重置为设备.
我上传了一个简约的项目,以便您可以重现我的问题.请忽略UI的缩小,这并不重要:)
保持我的问题简短,我创建了一个包含3个活动的应用程序,其中A - 类别列表,B - 项目列表,C - 单项.B和C中显示的数据是从在线XML解析的.但是,如果我通过A - > B1 - > C,然后返回A然后再回到B1,我希望将其数据缓存到某处,这样我就不必再次请求XML了.
我是Android和Java编程的新手,我已经搜索了很多东西,但仍然无法找到(或者根本就没有想法去哪看)一种方法来做我想要的.
将所有收到的数据存储在主要活动A(HashMaps?ContentProviders?)中然后传递给B和C(如果他们得到之前的相同请求)是个好主意?
我创建了一个搜索屏幕,其中包含一个用于关键字,过滤器和搜索按钮的选项卡,以及三个用于不同类型结果的可选选项卡(每个包含一个ListView带有a ArrayAdapter).启动活动时,Parcelable[]如果已执行搜索,开发人员可以选择将结果作为额外内容传递.在onCreate()方法中,我正在创建Parcelable[]传递的三个选项卡中的每一个.
当我从过滤器选项卡上的按钮调用搜索时,我清除选项卡并使用新结果重新创建它们,这非常有效.问题是,当您旋转设备时,Android的自动方向切换支持似乎会重新创建整个活动,即调用onCreate().这意味着我的搜索结果将重置为Parcelable[]启动活动时传递的内容.
到目前为止,我唯一的解决方案就是调用finish()然后startActivity()用新结果重新启动活动.我确信必须有一个更简单的解决方案,而且我做了一些非常无趣的事情.
有一个更好的方法吗?
我有一个listview,在main.xml布局中有两个按钮.点击一个按钮,我动态创建一个textview,并将其添加到屏幕底部以确认用户交互.当用户单击第二个按钮(确认按钮)时,我需要将该文本添加到listview.为了支持横向模式,我在layout-land文件夹中有相同的布局文件.当我点击第一个按钮时,它会创建一个包含一些文本的文本视图,并在屏幕底部添加.现在,如果更改设备方向,则它将加载横向main.xml,并且活动将再次重新创建.所以我的textview正在崩溃.如何防止在方向上重新开展活动.(但它应该选择其他布局文件).
有些事情我现在还不太明白.
我的主要活动类创建一个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个线程正在运行,没有用户交互.文档说:"首次创建活动时调用.".该活动已在运行,我不是想创建它.
有人可以解释一下这种行为吗?
我有关于旋转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)
我的问题是:
我正在使用自定义适配器与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) 我做了一个简单的应用程序,有2个按钮(开始和退出)和一个空的TextView.如果我按下开始按钮,将更新TextView.我的问题是,如果我旋转设备,我的布局将重新启动(如果开始按下,TextView将再次变空.为什么?
在我的布局上,我有一些按钮做出一些选择,然后一个按钮来执行对数据库的查询.此查询的结果显示在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) 我正在制作一个使用蓝牙连接的应用程序.我打电话蓝牙连接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