我正在构建主要用于移动浏览器的Web应用程序.我使用数字类型的输入字段,因此(大多数)移动浏览器仅调用数字键盘以获得更好的用户体验.这个Web应用程序主要用于小数分隔符是逗号而不是点的区域,所以我需要处理两个小数分隔符.
如何用点和逗号来掩盖这整个烂摊子?
我的发现:
桌面Chrome
$("#my_input").val(); 返回"455"桌面Firefox
$("#my_input").val(); 返回"4,55"Android浏览器
Windows Phone 8
$("#my_input").val(); 返回"4,55"当用户可能使用逗号或点作为小数分隔符并且我想将html输入类型保持为数字时,这种情况下的"最佳实践"是什么,以提供更好的用户体验?
我可以将逗号转换为"动态"点,绑定键事件,它是否与数字输入一起使用?
Currenlty我没有任何解决方案,如何从输入中获取浮点值(作为字符串或数字),类型设置为数字.如果最终用户输入"4,55",则Chrome返回"455",Firefox返回"4,55",这很好.
同样令人讨厌的是,在Android(经过测试的4.2模拟器)中,当我输入"4,55"输入字段并将焦点更改为其他位置时,输入的数字将被截断为"4".
在我的Windows Phone 8应用程序中,我有项目列表.我为列表项定义了ItemTemplate.
我想在每个项目中显示一个来自视图模型的值,而不是列表项本身.我应该如何设置从列表项到viewmodel的绑定.
我的数据模板是这样的:
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding MyViewModel.Country ?? }"/> <!-- From view model -->
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
那么如何将Country属性绑定到视图模型,而不是列表项(在项目源中).
我完全重写了我的一个Windows phone 8应用程序.我使用IsolatedStorageSettings在我的应用程序的"旧"和"新"版本中存储用户指定的设置.在我的新应用版本中,我只是将旧设置结构转换为新设置.
现在我想测试应用更新案例.到目前为止,我已尝试过以下内容.
我做错了什么?我应该测试应用更新案例,以及如何保持旧的__ApplicationSettings到位?
是否有一些id(?)现在在我的新旧应用程序中有所不同,并且平台认为旧的__ApplicationSettings不属于新版本并删除它?我在我的新应用程序中使用全新的命名空间.
我仍然在努力解决这个问题,如何保持旧的隔离存储设置(__ApplicationSettings).在文件本身中有对我的app命名空间的引用.例如,我保存了MyCollectionItem的集合,在__ApplicationSettings中我找到了行:
System.Collections.Generic.List`1 [[MyOldApp.MyModels.MyCollectionItem,MyOldApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = xxxxxxxxx
现在,当我的新应用程序使用全新的命名空间时,这不起作用?
另外我注意到,当我第一次使用我的新应用程序将某些内容保存到IsolatedStorageSettings时,旧设置(__ApplicationSettings)将被删除.
任何想法如何将IsolatedStorageSettings从旧应用程序迁移到新应用程序,因为基本上我的新应用程序是全新的应用程序.
在我的应用程序中,我在ViewPager中有Fragment.片段包含RecyclerView,其中包含基于用户选择从web api获取的数据列表.
在我的片段中,onSaveInstanceState我将列表数据保存到Bunde,以保持配置更改等数据.
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
savedState.putParcelableArrayList(LIST_STORAGE_KEY, new ArrayList<>(mItemAdapter.getModels()));
}
Run Code Online (Sandbox Code Playgroud)
现在我已经开始看到TransactionTooLargeException我的应用程序错误报告.
在某些情况下,似乎我放入Bundle的列表太大(因为它是相当复杂的对象的集合).
我该如何处理这个案子?如何存储(和恢复)我的Fragment状态.
setRetainInstance(true)在ViewPager中的Fragments 上使用是否可以?
我的RecyclerView项目中有两个文本视图.其中一个视图具有layout_weight ="1",以便在视图宽时保持另一个视图可见.
问题是当视图被回收时视图大小没有更新,所以当我滚动列表时textView id:name width不正确.
我应该以某种方式强制视图更新布局?
我的RecyclerView项目:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1" />
<LinearLayout
android:id="@+id/code_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/background_code"
android:orientation="vertical">
<TextView
android:id="@+id/code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:paddingBottom="1dp"
android:paddingLeft="7dp"
android:paddingRight="7dp"
android:paddingTop="1dp"
android:singleLine="true"/>
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我使用RecyclerView v.23.4.0.
更新
1.我试图在适配器onBindViewHolder()的末尾调用我的RecyclerView项目布局根requestLayout.
这没有任何影响,我的观点没有更新.
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
...
viewHolder.mLayoutRoot.requestLayout();
}
Run Code Online (Sandbox Code Playgroud)
2.问题是当我调用requestLayout时,视图还没有完全绘制出来?所以我尝试设置GlobalLayoutListener并在那里调用requestLayout.我认为这有点帮助,但如果我有足够的项目,在我的列表中并不是所有的视图都会更新.在我的列表中的Owerall我有大约10项.
ViewTreeObserver vto = viewHolder.mLayoutRoot.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
viewHolder.mLayoutRoot.requestLayout();
}
});
Run Code Online (Sandbox Code Playgroud)
3.我尝试使用带有shrinkColumns属性的TableLayout来接近类似的布局,但结果是一样的.名称文本视图widht并不总是正确设置.而且,看起来requestLayout根本没有任何影响(或者我在错误的地方调用它?)
4.(28/8/2016)
我将我的代码剥离到最低限度以重现这一点.
我设法使用setIsRecyclable(false)修复此问题,就像dosssik建议的那样,但我认为它在性能方面不是很好的解决方案? …
我已经有了使用Codeigniter PHP框架和Ion Auth身份验证库(用于Codeigniter)构建的CRUD Web应用程序.因此用户需要登录才能使用该网站等.
现在我使用Phonegap和jQuery mobile构建小型移动应用程序,该移动应用程序使用相同的后端.后端有"REST like"api处理来自移动客户端的所有ajax请求.
我该如何处理此移动应用的用户身份验证?我想尽可能多地使用现有的后端代码库.
我正在计划这样的事情:
如何在后端执行此操作?对于登录,我可以使用Codeigniter Ion Auth库登录方法并获得Codeigniter(PHP)会话ID.在第二个请求中,当用户将一些实际数据与sessoin id一起发送时,如何验证会话ID?或者,除了尝试使用现有功能(Codeignitre Ion Auth库)之外,为移动应用程序身份验证构建全新的登录功能是否更好?
所有的想法和建议都非常受欢迎!
我正在构建移动应用程序使用的rest api(使用PHP,Laravel).api基本上只是评论系统.
我计划允许用户使用OAuth 2使用他们的Facebook/MS/Twitter等帐户登录(使用此api).
流程将是这样的:
这有意义吗?有没有更好的方法来构建这种系统,其中实际的身份验证服务器与资源服务器完全不同?
我试图将这个json反序列化为对象数组:
[{
"name": "item 1",
"tags": ["tag1"]
},
{
"name": "item 2",
"tags": ["tag1","tag2"]
},
{
"name": "item 3",
"tags": []
},
{
"name": "item 4",
"tags": ""
}]
Run Code Online (Sandbox Code Playgroud)
我的java类看起来像这样:
public class MyObject
{
@Expose
private String name;
@Expose
private List<String> tags = new ArrayList<String>();
}
Run Code Online (Sandbox Code Playgroud)
问题是json的tags属性,它可以只是空字符串或数组.现在gson给了我错误:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING
我应该如何反序化这个json?
我对这个json没有任何控制权,它来自第三个pary api.
我在我的Android应用程序中使用自定义字体.我想将此自定义字体设置为应用程序默认字体(作为后备),但我仍然希望使用该TextView textAppearance属性来设置字体和文本样式.
它看起来像设置textViewStyle或fontFamily在我的应用程序基础主题,覆盖覆盖TextView textAppearance样式?
<style name="MyApp.Base" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Overriding fontFamily also overrides textView textAppearance -->
<item name="android:fontFamily">@font/open_sans</item>
<!-- Overriding textViewStyle also overrides textView textAppearance -->
<item name="android:textViewStyle">@style/DefaultTextAppearance</item>
</style>
<style name="DefaultTextAppearance" parent="TextAppearance.AppCompat">
<item name="android:textStyle">normal</item>
<item name="fontFamily">@font/open_sans_regular</item>
</style>
<style name="BoldTextAppearance" parent="TextAppearance.AppCompat">
<item name="android:textStyle">normal</item>
<item name="fontFamily">@font/open_sans_extra_bold</item>
</style>
<!-- This textView does not get bold style -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Me happy"
android:textAppearance="@style/BoldTextAppearance" />
Run Code Online (Sandbox Code Playgroud) 在我干净的架构 Android 应用程序设置中,我为每一层(数据、域、表示)都有自己的 Gradle 模块。我也为每一层都有自己的模型/实体,它们使用映射器从一层转换到另一层。这导致我有很多 kotlin 数据类,代表基本相同的东西,但在不同的层。这对我来说听起来不对。
简单的例子:
数据层- Android 库模块
@JsonClass(generateAdapter = true)
data class BuildingEntity(
@Json(name = "u_id")
val id: String,
val name: String,
val latitude: Double,
val longitude: Double,
@Json(name = "current_tenants")
val tenants: List<TenantEntity>? = null
)
Run Code Online (Sandbox Code Playgroud)
领域层- 纯 Kotlin 模块
data class Building(
val id: String,
val name: String,
val location: CoordinatePoint,
val tenants: List<Tenant>? = null
Run Code Online (Sandbox Code Playgroud)
表示层Android 应用模块
data class BuildingModel(
val id: String,
val name: String,
val location: LatLng,
val …Run Code Online (Sandbox Code Playgroud)