小编Jer*_*emi的帖子

导航组件:找不到 NavController

我正在使用导航组件在我的应用程序中导航。它在片段内工作正常,但无法在包含实际导航主机的活动中找到导航主机。

当用户单击 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)

navigation android android-jetpack

19
推荐指数
3
解决办法
4万
查看次数

Java Spring JDBC SPRING_SESSION 表不存在

我正在 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 克隆项目之后。在一切正常之前。

你有什么想法可能会出错吗?如果您需要我向您展示一些代码,请告诉我。

感谢您查看这个 :)

java mysql spring jdbc

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

在协调器布局中定位视图

我正在尝试创建一个带有协调器布局的屏幕,其中包括:

  • 工具栏
  • Fragment,将使用导航API为每个页面替换
  • 底部应用栏

但是,我正在努力以某种方式定位视图,因此应用程序的底部栏不会与片段中的内容重叠。

请问你有没有机会帮我解决这个问题?据我所知,唯一的方法是在底部添加边距,但这在设备之间可能不一致。

举例来说,此列表共有 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)

layout android android-coordinatorlayout

8
推荐指数
2
解决办法
7213
查看次数

Flutter:如何在使用 Sliver 小部件时在滚动时隐藏 BottomAppBar?

当用户向下滚动列表时,我试图隐藏底部应用栏,就像它在材料设计文档中的行为部分所示:

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)

android dart flutter

8
推荐指数
1
解决办法
5189
查看次数

SliverAppBar 没有完全折叠与短名单

我使用的颤振的SliverAppBarSliverList。应用栏适用于长列表,滚动很多。但是,如果我有包含 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)

android dart flutter

8
推荐指数
1
解决办法
827
查看次数

Flutter ReorderableListView - 如何添加分隔线

我有一个使用 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)

} …

dart flutter

7
推荐指数
1
解决办法
3031
查看次数

Android LiveData Observer 没有被第二次触发

我正在开展一项允许用户过滤搜索结果的活动。最初,我获取所有数据,但是当用户想要过滤它时,我需要调用另一个查询并更新视图。我为此使用 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)

android observable

6
推荐指数
1
解决办法
8307
查看次数

如何仅在特定片段中实施折叠工具栏

我正在尝试构建一个在所有屏幕上都显示标准工具栏的应用程序,但是当用户导航至屏幕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)

navigation layout android

6
推荐指数
0
解决办法
572
查看次数

如何优化滞后的 JetPack Compose 布局

我正在使用HorizontalPager来自伴奏者的包。寻呼机将为用户存储的每个练习提供一页。

寻呼机中的每个页面都有一个,其中包含多个带有s 和 等LazyColumn控件的卡片。卡的数量取决于用户配置的套数。我预计典型的数字在 1 到 8 之间,但在任何给定时间屏幕上只能看到 3 到 5 个(取决于屏幕尺寸和分辨率)。IconButtonBasicTextField

问题是,每次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)

performance android lag android-jetpack-compose

5
推荐指数
0
解决办法
3808
查看次数

Android:AltBeacon未检测到信标

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

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