我正在使用导航组件在我的应用程序中导航。它在片段内工作正常,但无法在包含实际导航主机的活动中找到导航主机。
当用户单击 FAB 时,我试图打开一个新片段,我将其包含在主要活动的 XML 中。当我调用 findNavController() 时,它找不到控制器。导航主机控制器位于 XML 布局中。我不明白为什么它找不到它。
主要活动
class MainActivity : AppCompatActivity(), OnActivityComponentRequest {
override fun getTabLayout(): TabLayout {
return this.tabLayout
}
override fun getFap(): FloatingActionButton {
return this.floatingActionButton
}
private lateinit var tabLayout: TabLayout
private lateinit var floatingActionButton: FloatingActionButton
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
this.tabLayout = tabs
this.floatingActionButton = fab
fab.setOnClickListener {
it.findNavController().navigate(R.id.addNewWorkoutFragment)
}
}
}
Run Code Online (Sandbox Code Playgroud)
活动主 XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".domain.MainActivity"
android:animateLayoutChanges="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay"> …
Run Code Online (Sandbox Code Playgroud) 我正在 Java Spring 中开发一个简单的 RESTfull 服务并使用 JDBCTemplate。
但是,我收到一个运行时错误,我不明白。它抱怨 SPRING_SESSION 表不存在,但是我认为 Spring 应该能够根据需要创建必要的表。
应用程序属性:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/getfit?useSSL=false
spring.datasource.username=root
spring.datasource.password=***
Run Code Online (Sandbox Code Playgroud)
例外:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'getfit.SPRING_SESSION' doesn't exist
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) ~[spring-jdbc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
Run Code Online (Sandbox Code Playgroud)
某些进程试图从不存在的表中删除记录会触发异常。
手动创建表会导致更多错误(不是现有列)。环境
hibernate.ddl-auto=update
Run Code Online (Sandbox Code Playgroud)
也没有帮助。
此外,我修改了 MySQL 配置以允许大写字符,这也没有帮助。
有趣的是,这个问题发生在我格式化我的操作系统并从 github 克隆项目之后。在一切正常之前。
你有什么想法可能会出错吗?如果您需要我向您展示一些代码,请告诉我。
感谢您查看这个 :)
我正在尝试创建一个带有协调器布局的屏幕,其中包括:
但是,我正在努力以某种方式定位视图,因此应用程序的底部栏不会与片段中的内容重叠。
请问你有没有机会帮我解决这个问题?据我所知,唯一的方法是在底部添加边距,但这在设备之间可能不一致。
举例来说,此列表共有 25 个项目,但最后两个项目与应用的底部栏重叠。
活动主线
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay"
android:animateLayoutChanges="true"
android:layout_above="@id/include">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:text="Test 1"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
<com.google.android.material.tabs.TabItem
android:text="Test 2"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<include
layout="@layout/content_main"
android:id="@+id/include"/>
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bar"
android:layout_gravity="bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchorGravity="right|top"
app:layout_anchor="@+id/bar"
android:src="@drawable/ic_add_black_24dp"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
内容主xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"
tools:context=".MainActivity">
<fragment
android:layout_width="411dp" …
Run Code Online (Sandbox Code Playgroud) 当用户向下滚动列表时,我试图隐藏底部应用栏,就像它在材料设计文档中的行为部分所示:
https://material.io/design/components/app-bars-bottom.html#behavior
我正在寻找的效果如下所示:https : //storage.googleapis.com/spec-host-backup/mio-design%2Fassets%2F1gaSrddolFHd8BwOioeYz0ODiyEhCevtn%2Fbehavior-scroll.mp4
到目前为止,我向 Scaffold 添加了底部应用栏,但它没有滚动行为。
在 StackOverflow 上回答了一个类似的问题,但它显示了一种解决方法,并且已经在不久前得到了回答。
在 Flutter 中是否有合法的方法来实现这种效果?
我的代码:
import 'package:fitness_fatality_flutter/data/entities/exercise.dart';
import 'package:fitness_fatality_flutter/data/entities/workout.dart';
import 'package:flutter/material.dart';
class WorkoutDetailsPage extends StatelessWidget {
Workout _workout = Workout();
final List<Exercise> exercises = [
Exercise(name: "Push Ups"),
Exercise(name: "Bench press"),
Exercise(name: "Pull ups"),
Exercise(name: "Press ups"),
Exercise(name: "Crunches"),
Exercise(name: "Sit ups"),
Exercise(name: "BIceps curl"),
Exercise(name: "Something else"),
Exercise(name: "Push Ups"),
Exercise(name: "Bench press"),
Exercise(name: "Pull ups"),
Exercise(name: "Press ups"),
Exercise(name: "Crunches"),
Exercise(name: "Sit ups"),
Exercise(name: "BIceps curl"),
Exercise(name: …
Run Code Online (Sandbox Code Playgroud) 我使用的颤振的SliverAppBar
有SliverList
。应用栏适用于长列表,滚动很多。但是,如果我有包含 8 个项目的中等大小的列表,则应用栏只会部分折叠,直到列表中的项目用完为止。滚动停止是合乎逻辑的,因为没有更多的项目,但它在应用栏上留下了一个非常讨厌的效果,它被留在它过渡到折叠工具栏的中间。
有没有办法强制列表向上滚动直到工具栏完全折叠?
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton.extended(
label: Text("Start!"),
icon: Icon(Icons.play_arrow),
backgroundColor: Colors.orange,
elevation: 12,
onPressed: () {
Routing.navigate(
context,
LoggingPage(
workout: _workout,
exercises: workoutExercises,
),
);
},
),
body: CustomScrollView( physics: ScrollPhysics(),
slivers: <Widget>[
SliverAppBar(
actions: <Widget>[
MaterialButton(onPressed: (){}, child: Text("data"),)
],
expandedHeight: 300,
pinned: true,
floating: true,
snap: true,
flexibleSpace: FlexibleSpaceBar(
title: Text(_workout.name),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
buildSliverListItem,
childCount: workoutExercises.length,
),
),
],
),
);
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用 ReorderableListView 创建的列表。我想要一个带有分隔符的单独的每个列表项。我正在寻找一个干净的解决方案,类似于 ListView.separated(),但是我找不到与 ReorderableListView 类似的任何内容。目前,在我的代码中,我使用一个列小部件,为每个项目添加一个分隔线,但这非常“hacky”。您知道如何以更好的方式实施这一点吗?
我正在寻找这样的分隔符:
我的代码:
主页:
Widget _buildList(RoutinesState state) {
if (state is RoutinesFetched || state is RoutinesReordered) {
List<CustomCard> cards = [];
state.routines.forEach(
(e) {
cards.add(
CustomCard(
key: PageStorageKey(UniqueKey()),
title: e.name,
onTap: () {
Navigator.pushNamed(
context,
RoutineDetails.PAGE_ROUTE,
arguments: RoutineDetailsArgs(e),
);
},
includeDivider: cards.isNotEmpty,
),
);
},
);
return ReorderableListView(
children: cards,
onReorder: (int from, int to) => {
bloc.add(ReorderRoutine(fromIndex: from, toIndex: to)),
},
);
}
return Container(
child: Text("No routines found yet :( "),
);
Run Code Online (Sandbox Code Playgroud)
} …
我正在开展一项允许用户过滤搜索结果的活动。最初,我获取所有数据,但是当用户想要过滤它时,我需要调用另一个查询并更新视图。我为此使用 Android ROOM 和 ViewModel。
问题是,每次我获取新数据时,我都需要创建一个新的观察者,因为旧的观察者“停止”启动。通常,这应该与一个观察者一起工作,每次更新数据时都会调用该观察者。您能帮我理解为什么会发生这种情况吗?
活动:
package com.jds.fitnessjunkiess.getfitapp.Activities.ExercisesView;
import android.arch.lifecycle.ViewModelProviders;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import com.jds.fitnessjunkiess.getfitapp.Activities.ExercisesView.Adapters.ExercisesAdapter;
import com.jds.fitnessjunkiess.getfitapp.Data.ViewModels.ExerciseViewModel;
import com.jds.fitnessjunkiess.getfitapp.R;
public class ExercisesViewActivity extends AppCompatActivity implements View.OnClickListener {
private ExerciseViewModel exerciseViewModel;
private ExercisesAdapter recyclerViewerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exercises_view);
Toolbar toolbar = findViewById(R.id.toolbar_exercise_view_activity);
toolbar.setTitle("Exercises");
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
}
RecyclerView recyclerView = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个在所有屏幕上都显示标准工具栏的应用程序,但是当用户导航至屏幕B时,我想显示一个折叠工具栏,该工具栏将向用户显示其他信息。
这里的挑战是我遵循的惯例是,一个活动包含所有常用视图(工具栏,底部应用程序栏,FAB等),并在用户导航到不同屏幕时在活动中间替换片段。我正在使用导航组件来实现此目的。不幸的是,共享工具栏有一个问题:
我尝试在不需要折叠时(为了防止折叠效果)将所有东西隐藏在可折叠工具栏中,但这导致工具栏根本没有标题。最有可能与导航组件本身有关。
我还考虑过将折叠的工具栏放在需要它的片段中,并只是将主工具栏隐藏在onResume中,但是布局本身不会相应地进行调整。
您知道可以采用其他方法解决此问题吗?最简单的方法是为每个片段仅拥有一个专用的工具栏,但这将导致大量代码重复,我正尝试避免这种情况。
在我的案例中,关于StackOverflow的类似问题并没有帮助解决此问题。
下面的代码并没有解决所有无法解决的问题,因此我删除了这些更改。
主要活动
class MainActivity : AppCompatActivity(), OnActivityComponentRequest, NavController.OnDestinationChangedListener {
private lateinit var floatingActionButton: FloatingActionButton
private lateinit var appBarLayout: AppBarLayout
private lateinit var navHostFragment: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
floatingActionButton = fab
appBarLayout = app_bar_layout
navHostFragment = include
setSupportActionBar(toolbar)
val navigationController = Navigation.findNavController(this, R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navigationController.graph)
toolbar.setupWithNavController(navigationController, appBarConfiguration)
navigationController.addOnDestinationChangedListener(this)
}
override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) {
Log.d("MainActivity", "Destination has been changed $destination")
}
override fun getFap(): …
Run Code Online (Sandbox Code Playgroud) 我正在使用HorizontalPager
来自伴奏者的包。寻呼机将为用户存储的每个练习提供一页。
寻呼机中的每个页面都有一个,其中包含多个带有s 和 等LazyColumn
控件的卡片。卡的数量取决于用户配置的套数。我预计典型的数字在 1 到 8 之间,但在任何给定时间屏幕上只能看到 3 到 5 个(取决于屏幕尺寸和分辨率)。IconButton
BasicTextField
问题是,每次HorizontalPager
需要构建包含 3 张以上卡片的新页面时,此布局都会产生明显的滞后(动画跳帧)。在页面之间交换时会发生这种情况。在真实设备(Galaxy S10e)和模拟器上运行的调试和发布版本中也会发生同样的情况。
我正在尝试优化此布局,因此无论屏幕上显示的卡片数量如何,每个帧的渲染时间都不超过 16 毫秒。
我之前曾尝试通过为某些可组合项设置固定高度来解决此问题,但这并没有多大帮助。我也尝试过使用Text
而不是,然后当用户点击文本时,BasicTextField
它会被替换为,但这并没有多大帮助,因此我删除了这个实现。BasicTextField
您对如何提高此布局的性能以消除延迟有什么建议吗?
下面是我的代码、应用程序屏幕和分析器的屏幕截图:
@ExperimentalPagerApi
@Composable
fun WorkoutSessionScreen(
navHostController: NavHostController,
) {
val pagerState = rememberPagerState()
Scaffold(
topBar = { MyTopAppBar(navHostController = navHostController) }
) {
Box(
modifier = Modifier
.fillMaxHeight()
.fillMaxWidth()
.background(MaterialTheme.colors.background)
.imePadding()
) {
HorizontalPager(
count = 10, state =
pagerState,
itemSpacing = 16.dp
) {
Log.e("==>", …
Run Code Online (Sandbox Code Playgroud) 我正在使用AltBeacon库开发一个简单的信标接近应用程序 https://altbeacon.github.io/android-beacon-library/samples.html
我正在尝试上面网站上提供的示例代码,但是,每次运行应用程序时,它只会转到didDetermineStateForRegion()方法.如果它检测到信标,它将转到didEnterRegion()方法.
我不确定我做错了什么,并且无法在其他问题中找到答案.
上述网站上提供的参考应用程序存在同样的问题,但Locate应用程序(基于AltBeacon)会立即检测到我的信标.
我的信标设置为152ms传输间隔和最大传输功率.
这是我的代码:
主要活动
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
protected final String TAG = "Beacons Monitoring";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
public void onDestroy(){
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.e(TAG,"I just saw a beacon for the first time");
}
@Override
public void didExitRegion(Region region) {
Log.e(TAG, "I lost …
Run Code Online (Sandbox Code Playgroud) android ×8
dart ×3
flutter ×3
layout ×2
navigation ×2
altbeacon ×1
beacon ×1
java ×1
jdbc ×1
lag ×1
mysql ×1
observable ×1
performance ×1
spring ×1