我正在努力使我的应用程序在API <23设备上完美运行,以便在API 23设备上运行.它在以下的场景中崩溃了.用户通过更改设置options menu.如果他们在菜单选项上慢慢点击(所以有时间看到突出显示的选项),一切都很好,但如果他们点击,应用程序崩溃.
我知道这是一种退出奇怪的行为,我花了一些时间试图理解是什么引发了错误.在重新创建()之后发生错误onOptionItemSelected.我在重新创建()之前设置了一个超时来测试该选项是否"已经过验证"但是没有用.我只能想到API 23中的某种错误,因为它之前使用过其他API.这是我的代码片段(减少到最低限度):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_1:
//... some code goes here
recreate();
return true;
// some other options ..
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
创建一个空白活动的新项目后,只需添加onOptionsItemSelected()
if (id == R.id.action_settings) {
recreate();
return true;
}
Run Code Online (Sandbox Code Playgroud)
该应用程序仍然崩溃.
这是logcat:
Run Code Online (Sandbox Code Playgroud)10-20 23:12:10.062 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d1b80 10-20 23:12:11.050 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4013030 10-20 23:12:11.075 3217-3245/? E/Surface: queueBuffer: error queuing buffer to SurfaceTexture, -19 10-20 23:12:11.075 3217-3245/? …
我有一个活动可以监听偏好更改并重新加载应用程序。我正在recreate()这样做。但我不知道如何通过它传递参数,所以我求助于手动活动重新加载。
Intent intent = getIntent();
finish();
// add in the arguments as Extras to the intent
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这具有我想要的行为,但对用户来说,重新创建活动并不顺利,因为他们会看到活动被终止并重新启动相同的活动。我希望用户不知道该活动已重新启动。所以,我的问题是我可以使用该方法recreate()并仍然通过它传递参数。
我看过这个问题,但没有得到好的答案,我的情况有点不同.我有2个活动A和B.从活动AI启动活动B但活动A必须保持打开,现在我登录活动BI后在共享首选项中保存一些数据,我需要活动A中的布局根据共享首选项值进行更改,因此登录后,活动A必须重新创建以应用更改,但仍应位于活动B之后.
所以我的问题是可以从Activity B重新创建活动A.
问题描述:
我的应用程序有主要活动和设置活动.每次关闭设置活动后,主活动都会重新创建.
可以通过finish()在两个位置关闭主活动(应用程序退出):操作栏中的主页按钮和后退按钮(硬件或弹出栏).
Home按钮工作没有问题,Back按钮在开始时工作,但如果用户在Settings Activity中,关闭它并返回到Main Activity,onBackPressed()函数不再被调用.
如果我删除娱乐,后退按钮工作正常,就像主页按钮一样.
所以,如果有人知道为什么重新创建()弄乱Back按钮?
谢谢.
部分相关代码:
主要活动:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Open Settings Activity
case R.id.menuSettings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, REQUEST_SETTINGS);
return true;
// Close the App
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case REQUEST_SETTINGS:
// Recreate activity
recreate();
break; …Run Code Online (Sandbox Code Playgroud) 我创建了一个 docker MySql 5.7 映像,然后想更改几个名称。我的 docker-compose.yml 文件最终像这样
version: '3.3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'maps_data'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'myuser'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3406:3306'
expose:
# Opens port 3406 on the container
- '3406'
# Where our data will be …Run Code Online (Sandbox Code Playgroud) 我有一个 android studio 项目。当我旋转屏幕时,android 会破坏并重新创建主要活动。如果android要重新创建活动,我如何在销毁过程中检查?
我想知道是否有任何方法可以将新选项传递给已经创建的 Slick carousel?我有这个代码:
$('.bottom-slider').slick({
asNavFor: '.top-slider',
slidesToShow: 3,
slidesToScroll: 1,
variableWidth: true,
centerMode: true,
etc...
});
Run Code Online (Sandbox Code Playgroud)
并且在某个时候(添加了 CSS 类来重新设置滑块的样式)我想传递slidesToShow: 5给轮播。我试过
$('.bottom-slider').slick({slidesToShow: 5});
Run Code Online (Sandbox Code Playgroud)
但它不起作用。是否可以?我不想破坏/再次运行滑块或使用“重新设计的”轮播创建第二个框。
我已经初始化砌体插件 - 工作正常,
比我销毁它的媒体宽度 <= 767px - 它被销毁了
但是当我回到媒体宽度 > 767px 并再次初始化砌体时,它不起作用。
为什么?
或者是否有其他解决方案可以关闭 masonry 插件,然后在某些事件中打开它?
这是我的代码:
var masonryData = {
isInitLayout: true,
isResizeBound: false,
itemSelector: '.item',
columnWidth: 300,
gutter: 20,
transitionDuration: '0.5s'
};
function initializeMasonry(masonryData){
if (jQuery().masonry) {
var masonryContainer = jQuery('.masonry').masonry(masonryData);
jQuery(masonryContainer).imagesLoaded(function(){
jQuery(masonryContainer).masonry(masonryData);
});
}
}
function destroyMasonry(){
if (jQuery().masonry) {
jQuery('.masonry').masonry();
jQuery('.masonry').masonry('destroy');
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用查询插件,所以我对 js 媒体查询使用匹配/不匹配方法:
$.Site.Match.smallScreen = function() {
...
destroyMasonry();
...
}
$.Site.Match.mediumScreen = function() {
...
initializeMasonry(masonryData);
...
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助