通常当我遍历游标时,我会使用如下内容:
while (cursor.moveToNext()) {
// get stuff from the cursor
}
Run Code Online (Sandbox Code Playgroud)
迭代Android游标的最佳方法是什么?对各种选项进行了很好的讨论.但是现在我需要从光标上的倒数到倒数第一位.
那我该怎么办?
我在SQLite中创建一个FTS4外部内容表,如下所示:
CREATE TABLE t2(id INTEGER PRIMARY KEY, col_a, col_b, col_text);
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_text);
Run Code Online (Sandbox Code Playgroud)
我使用的是外部内容表,以便我并不需要存储的重复值col_text在fts_table.我只是索引col_text因为col_a并且col_b不需要索引.
然而,当我做一个查询fts_table这样的
SELECT * FROM fts_table WHERE fts_table MATCH 'something';
Run Code Online (Sandbox Code Playgroud)
我没有访问col_a,并col_b从内容表t2.如何返回所有这些列(col_a,col_b,col_text)从单个FTS查询?
更新
我尝试使用该notindexed=column_name选项
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_a, col_b, col_text, notindexed=col_a, notindexed=col_b);
Run Code Online (Sandbox Code Playgroud)
这应该适用于某些人,但我在Android中使用它,notindexed直到SQLite 3.8才支持该选项,Android直到Android版本5.x才支持.我需要支持android 4.x. 我正在更新此问题以包含Android代码.
如果我做一个简单的测试用例
@Test
public void myTest() throws Exception {
Spanned word = new SpannedString("Bird");
int length = word.length();
}
Run Code Online (Sandbox Code Playgroud)
抛出异常
java.lang.RuntimeException:未模拟android.text.SpannableStringInternal中的方法长度.有关详细信息,请参阅 http://g.co/androidstudio/not-mocked.
这在上面的链接中解释为
用于运行单元测试的android.jar文件不包含任何实际代码 - 由真实设备上的Android系统映像提供.相反,所有方法都抛出异常(默认情况下).这是为了确保您的单元测试仅测试您的代码,而不依赖于Android平台的任何特定行为(您没有明确嘲笑,例如使用Mockito).
那么你如何在Android项目中设置Mockito以模拟这样的类?
我想学习,所以我将在Q&A风格下添加我的答案.
我想在 a 中获取一种类型的所有跨度CharSequence并将它们转换为不同的类型。例如,将所有粗体跨度转换为下划线跨度:
我该怎么做?
(这是我今天面临的一个问题,既然我现在已经解决了,我在这里添加一个问答对。我的答案如下。)
我计划从 Android 和 iOS 开发切换到 Flutter。只需要维护一个代码库的想法非常令人兴奋。在这一点上,我仍然只是观察和学习。
不过,让我有点反感的一件事是创建小部件时代码缩进中的巨大山脉和山谷。这是从这个答案中获取的一个例子:
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
return new Scaffold(
body: new Padding(
padding: const EdgeInsets.all(10.0),
child:
new Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.start,
children: icons.map((IconData iconData) {
return new Container(
margin: new EdgeInsets.all(10.0),
child: new IconButton(
icon: new Icon(iconData), onPressed: () {
// TODO: Implement
}),
);
}).toList(),
),
new Expanded(
child: new Align(
alignment: FractionalOffset.center,
child: new AspectRatio(
aspectRatio: 1.0,
child: new Stack(
children: <Widget>[ …Run Code Online (Sandbox Code Playgroud) 我想为Flutter项目创建一个空列表.
final prefs = await SharedPreferences.getInstance();
final myStringList = prefs.getStringList('my_string_list_key') ?? <empty list>;
Run Code Online (Sandbox Code Playgroud)
我似乎记得有多种方法,但一种推荐方式.我该怎么做?
这是我在Dart使用指南中找到答案后制作的Q&A风格的帖子.我的答案如下.
我试图像在Android中为RecyclerView适配器所做的那样,在AnimatedList上预生成所有更新操作。但是当我要清除所有数据时,我不知道该怎么做。
如果我这样做
setState(() {
_data.clear();
});
Run Code Online (Sandbox Code Playgroud)
然后清除了后备数据,但是GlobalKey的当前状态仍然不知道更改,并且没有任何clear()方法。
补充代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: Text('Update AnimatedList data')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
BodyWidgetState createState() {
return new BodyWidgetState();
}
}
class BodyWidgetState extends State<BodyWidget> {
// the GlobalKey is needed to animate the list
final GlobalKey<AnimatedListState> _listKey = GlobalKey();
// backing data
List<String> …Run Code Online (Sandbox Code Playgroud) 据我所知,Dart不支持字素簇,尽管有人说支持它:
在实施之前,通过字素簇进行迭代的选择有哪些?例如,如果我有这样的字符串:
String family = '\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}'; // ??
String myString = 'Let me introduce my $family to you.';
Run Code Online (Sandbox Code Playgroud)
在五个代码点的家庭表情符号后面有一个光标:
如何将光标向左移动一个用户可感知的字符?
(在这种特殊情况下,我知道了字素簇的大小,因此我可以做到,但是我真正要问的是找到任意长的字素簇的长度。)
更新资料
我从本文中看到,Swift使用了系统的ICU库。Flutter中可能有类似的可能。
对于那些想玩我上面的示例的人,这里是一个演示项目。按钮将光标向右或向左移动。当前需要按8个按钮才能将光标移到家庭表情符号上。
主镖
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Grapheme cluster testing')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
_BodyWidgetState createState() => _BodyWidgetState();
}
class _BodyWidgetState extends State<BodyWidget> {
TextEditingController …Run Code Online (Sandbox Code Playgroud) 在 Flutter 中,在 Paragraph 或 TextPainter 布置其文本后,您可以通过调用 来获取行(或行内运行)的 Rect getBoxesForSelection。如果你画出实际的盒子,它们看起来像这样:
如何以编程方式获取每个文本框中的文本?
如何在 Dart 中检查字符串是否为“null”?(不是null物体)
是否有像 Java 那样的 Dart SDK API equals?