小编mar*_*987的帖子

Room 和 ViewModel,多个查询?

所以我有一个带有 Room 数据库的 Android 应用程序,这个后端由一个充当存储库的类管理,该存储库为我的视图模型提供数据,然后我的活动(片段)观察视图模型(每个人都还在我身边吗?)在我的一个片段中,我想获取数据库中点击值高于 X 的所有卡片(实体)的列表,但我也想获取所有标记为收藏夹的卡片,无论其点击值如何。

我当前的解决方案是通过我的存储库从我的视图模型运行 2 个单独的查询,并且我的活动观察这两个查询并组合返回给它的列表,这无法正常工作,因为我的列表加倍了,而且我没有当观察者在不同时间返回时清除列表的好地方,因为它们是异步的(我将发布所有代码)。

我认为我想要的是以某种方式组合查询,以便我只管理一个列表,但我的 SQL 知识不是很好,我不确定这是否可能,或者我可以以某种方式将这些列表合并到我的存储库类中但因为我正在使用实时数据,所以我不确定如何安全地获取数据来组合列表,但也许有一个我不知道的更好的解决方案,但我将在下面发布我正在做的事情

DAO 查询 这是我运行的两个查询,一个查询所有卡片被点击 x 次,另一个查询所有标记为收藏的卡片,两者都采用目前不相关的搜索字符串

@Query("SELECT * FROM card WHERE cardFavourite AND cardWord LIKE :searchWord ORDER BY cardWord ASC")
LiveData<List<Card>> searchFavourites(String searchWord);

@Query("SELECT * FROM card WHERE cardClicked >= :clicks AND cardKeyStage <= :keystage  AND cardWord LIKE :searchWord ORDER BY cardFavourite ASC, cardClicked DESC, cardWord ASC")
LiveData<List<Card>> searchCardListRecents(String searchWord,int clicks, int keystage);
Run Code Online (Sandbox Code Playgroud)

存储库我的存储库是一个充满对数据库的调用的类,这些数据库将实时数据返回到其视图模型,所需的内容是:

public LiveData<List<Card>> searchFavouriteCards(String searchString){
    return cardDao.searchFavourites(searchString);
}

public LiveData<List<Card>> searchRecentCards(String searchString, int clicks){ …
Run Code Online (Sandbox Code Playgroud)

android android-room android-livedata android-viewmodel

4
推荐指数
1
解决办法
8722
查看次数

Flutters 手势检测器 onTap 仅在文本子项上触发

我正在制作一个以手势检测器为根的小​​部件,它的子项是一列,然后有多个不同的子视图,其中一些是文本字段,但手势检测器仅在我按下文本字段时才触发,尽管视图采用在颤振检查器中全屏显示这是我的构建方法

      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onTap: (){
            print("tap");
            function(context);
          },
          child: Column(
            children: <Widget>[
              Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: buildTopDivider(),
              ),
              Container(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Row(
                    children: <Widget>[
                      Expanded(
                        child: Padding(
                          padding: const EdgeInsets.only(right: 8.0),
                          child: Column(
                            children: buildTextFields(),
                          ),
                        ),
                      ),
                      Column(
                        children: buildIconContainer(),
                      ),
                    ],
                  ),
                ),
              ),
              Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: buildBottomDivider(),
              )
            ],
          ),
        );
      }
Run Code Online (Sandbox Code Playgroud)

并附上一个屏幕截图,显示手势检测器占据了整个视图,略有编辑但显示了问题,所以我希望能够按下此项目的任何位置并触发 onPress 方法,但目前如所述只有当我按下任何一个看起来很奇怪的文本视图时才会触发,有什么想法吗?

发出手势检测器

gesturedetector flutter

4
推荐指数
2
解决办法
6369
查看次数

android导航组件上移按钮,显示箭头,但popTo不起作用

我正在使用一个非常简单的设置,一个活动(MainActivity)和4个片段的jetpack导航组件

MainFragment,

CardPreviewFragment,

createCardFragment,

和AddPredictionChipsFragment,

NavigationUI组件使用我的工具栏设置了我的导航控制器,我将操作设置为每个目标,同时将popTo设置为每个目标。我可以成功导航到这些片段中的每一个,并且工具栏标题正确更改,并且主页图标正确显示后退箭头,但是按箭头以使用popTo操作不会执行任何操作(如果我设置了弹出式进入和退出动画并使用后退按钮,则请注意返回动画。)欢迎任何想法,以下是为简洁起见而编辑的相关代码

主要活动

public class MainActivity extends AppCompatActivity

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

private void setNavigation() {
 navController = Navigation.findNavController(this, R.id.main_fragment);
 NavigationUI.setupActionBarWithNavController(this, navController);
}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
 Intent i;
 switch (item.getItemId()){
  case R.id.preferences :
    //code
    return true;
  case R.id.share :
    //code
  case R.id.create :
    //code
  case R.id.about :
    //code
    return true;
 }
 return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

我的主要活动确实使用了操作栏,其中显示了搜索栏和一些菜单项,我不知道这是否在某种程度上影响了它(已尝试将其删除而没有任何变化)

内容主体包含一个导航主机片段

<fragment
  android:id="@+id/main_fragment" …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-actionbar android-jetpack-navigation

3
推荐指数
1
解决办法
2041
查看次数

ShapeShifter 旋转使用坐标 0, 0,而不是中心

我正在尝试使用形状移位器来创建动画https://shapeshifter.design/但当我尝试向我的矢量添加旋转动画时,无论我做什么(已经尝试了许多矢量,其中一些是我创建的,还有一些我已经在线下载)它在 0,0 坐标而不是图像的中心旋转。

重现步骤

  1. 开放式变形器
  2. 选择导入 svg
  3. 选择 svg
  4. 添加图层组并将我想要旋转的路径移动到该组
  5. 添加旋转动画

除非我错过了一些东西,否则这应该旋转图像

我还发现 Alex Lockwood 有另一个 shapeshifter 工具https://beta.shapeshifter.design/,您可以在其中创建想要动画化的矢量,并且由于我的图像很容易复制,我确实这样做了,但发现了相同的结果,所以我的问题是如何使用 shapeshifter 围绕其中心旋转我的矢量(或任何矢量)?

animation svg android vector

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

如何从集成测试中选择颤振时间选择器中的时间

我正在为 Flutter 应用程序编写集成测试,我需要打开时间选择器并选择一个时间,它是 android 中的时间选择器对话框,我可以点击选择器上方的时间,然后点击确定和取消按钮,但我不能更改表盘的选定时间。查看他们的小部件测试,他们正在使用偏移量对其进行测试,我不确定如何从集成测试中执行此操作。我创建了一个演示并截取了 flutter 小部件树的屏幕截图,您可以在其中看到拨号和手势检测器等,但没有任何键可以找到,也无法通过文本进行查找,深入研究源他们创建了一个 _TappableLabel 列表,它从画家那里获取文本,有没有人有办法做到这一点?

颤动小部件树

android-timepicker flutter

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