小编dev*_*vha的帖子

如何使用html5输入类型编号处理浮点数和小数分隔符

我正在构建主要用于移动浏览器的Web应用程序.我使用数字类型的输入字段,因此(大多数)移动浏览器仅调用数字键盘以获得更好的用户体验.这个Web应用程序主要用于小数分隔符是逗号而不是点的区域,所以我需要处理两个小数分隔符.

如何用点和逗号来掩盖这整个烂摊子?

我的发现:

桌面Chrome

  • 输入类型=数字
  • 用户输入"4,55"到输入字段
  • $("#my_input").val(); 返回"455"
  • 我无法从输入中获得正确的值

桌面Firefox

  • 输入类型=数字
  • 用户输入"4,55"到输入字段
  • $("#my_input").val(); 返回"4,55"
  • 多数民众赞成,我可以用点替换逗号并得到正确的浮点数

Android浏览器

  • 输入类型=数字
  • 用户输入"4,55"到输入字段
  • 当输入失去焦点时,值被截断为"4"
  • 让用户感到困惑

Windows Phone 8

  • 输入类型=数字
  • 用户输入"4,55"到输入字段
  • $("#my_input").val(); 返回"4,55"
  • 多数民众赞成,我可以用点替换逗号并得到正确的浮点数

当用户可能使用逗号或点作为小数分隔符并且我想将html输入类型保持为数字时,这种情况下的"最佳实践"是什么,以提供更好的用户体验?

我可以将逗号转换为"动态"点,绑定键事件,它是否与数字输入一起使用?

编辑

Currenlty我没有任何解决方案,如何从输入中获取浮点值(作为字符串或数字),类型设置为数字.如果最终用户输入"4,55",则Chrome返回"455",Firefox返回"4,55",这很好.

同样令人讨厌的是,在Android(经过测试的4.2模拟器)中,当我输入"4,55"输入字段并将焦点更改为其他位置时,输入的数字将被截断为"4".

javascript floating-point mobile jquery html-input

122
推荐指数
5
解决办法
19万
查看次数

绑定到父datacontext(在itemsource之外)

在我的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属性绑定到视图模型,而不是列表项(在项目源中).

wpf binding mvvm caliburn.micro windows-phone-8

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

如何测试Windows Phone 8应用程序更新,迁移IsolatedStorageSettings

我完全重写了我的一个Windows phone 8应用程序.我使用IsolatedStorageSettings在我的应用程序的"旧"和"新"版本中存储用户指定的设置.在我的新应用版本中,我只是将旧设置结构转换为新设置.

现在我想测试应用更新案例.到目前为止,我已尝试过以下内容.

  • 使用VS(相同的应用程序ID和发布者ID)构建"旧"和"新"xap文件.
  • 使用WP Power Tools安装旧的xap
  • 在应用程序中保存一些设置,使用WP Power Tools检查设置是否保存到__ApplicationSettings
  • 使用WP Power Tools更新app xap文件
  • 检查__ApplicationSettings是否仍然存在"旧"数据
  • 启动新应用程序,__ ApplicationSettings现在为空,所有旧数据都已消失.

我做错了什么?我应该测试应用更新案例,以及如何保持旧的__ApplicationSettings到位?

是否有一些id(?)现在在我的新旧应用程序中有所不同,并且平台认为旧的__ApplicationSettings不属于新版本并删除它?我在我的新应用程序中使用全新的命名空间.

UPDATE

我仍然在努力解决这个问题,如何保持旧的隔离存储设置(__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从旧应用程序迁移到新应用程序,因为基本上我的新应用程序是全新的应用程序.

isolatedstorage updates windows-phone-8

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

片段,保存onSaveInstanceState上的大型数据列表(如何防止TransactionTooLargeException)

在我的应用程序中,我在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 上使用是否可以?

android exception android-fragments

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

RecyclerView项layout_weight,大小不更新

我的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建议的那样,但我认为它在性能方面不是很好的解决方案? …

android android-layout android-recyclerview

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

Phonegap和Jquery移动应用程序使用Codeigniter Ion Auth后端登录

我已经有了使用Codeigniter PHP框架和Ion Auth身份验证库(用于Codeigniter)构建的CRUD Web应用程序.因此用户需要登录才能使用该网站等.

现在我使用Phonegap和jQuery mobile构建小型移动应用程序,该移动应用程序使用相同的后端.后端有"REST like"api处理来自移动客户端的所有ajax请求.

我该如何处理此移动应用的用户身份验证?我想尽可能多地使用现有的后端代码库.

我正在计划这样的事情:

  • 从客户端发送用户名并传递给服务器
  • 将会话ID从服务器返回给客户端
  • 将会话ID存储到客户端(本地存储)
  • 将每个请求中的该令牌发送到服务器并在服务器端验证它.

如何在后端执行此操作?对于登录,我可以使用Codeigniter Ion Auth库登录方法并获得Codeigniter(PHP)会话ID.在第二个请求中,当用户将一些实际数据与sessoin id一起发送时,如何验证会话ID?或者,除了尝试使用现有功能(Codeignitre Ion Auth库)之外,为移动应用程序身份验证构建全新的登录功能是否更好?

所有的想法和建议都非常受欢迎!

authentication codeigniter jquery-mobile cordova ion-auth

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

Rest API用于验证外部OAuth 2.0访问令牌

我正在构建移动应用程序使用的rest api(使用PHP,Laravel).api基本上只是评论系统.

我计划允许用户使用OAuth 2使用他们的Facebook/MS/Twitter等帐户登录(使用此api).

流程将是这样的:

  • 使用(用户)选定的OAuth提供程序在移动客户端中验证用户
  • 从OAuth提供商处获取access_token(也可能是用户名/电子邮件)并将其保存到移动客户端
  • 用户访问我的休息Api(留下评论),我包括要求的OAuth身份验证令牌
  • 在服务器端,我验证此令牌

这有意义吗?有没有更好的方法来构建这种系统,其中实际的身份验证服务器与资源服务器完全不同?

authentication api rest oauth oauth-2.0

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

Gson,如何反序列化数组或空字符串

我试图将这个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.

java android json gson

5
推荐指数
2
解决办法
7123
查看次数

Android:如何设置应用程序范围的默认字体,而不是覆盖textAppearance

我在我的Android应用程序中使用自定义字体.我想将此自定义字体设置为应用程序默认字体(作为后备),但我仍然希望使用该TextView textAppearance属性来设置字体和文本样式.

它看起来像设置textViewStylefontFamily在我的应用程序基础主题,覆盖覆盖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 android-fonts android-theme android-styles

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

干净的架构:在不同的层共享相同的模型/实体

在我干净的架构 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)

architecture android kotlin clean-architecture

5
推荐指数
2
解决办法
2857
查看次数