小编Joe*_*Joe的帖子

ListView中的Focusable EditText

到目前为止,我已经花了大约6个小时的时间,除了路障之外什么都没打.一般的前提是a中有一些行ListView(无论是由适配器生成,还是作为标题视图添加)包含一个EditText小部件和一个Button.我想要做的就是能够使用jogball /箭头,将选择器导航到正常的单个项目,但是当我到达特定行时 - 即使我必须明确地识别行 - 它具有可聚焦孩子,我希望那个孩子采取焦点而不是用选择器指示位置.

我已经尝试了很多可能性,到目前为止还没有运气.

布局:

<ListView
    android:id="@android:id/list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    />
Run Code Online (Sandbox Code Playgroud)

标题视图:

EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Run Code Online (Sandbox Code Playgroud)

假设适配器中还有其他项目,使用箭头键将按预期在列表中上/下移动选择; 但是当到达标题行时,它也会与选择器一起显示,并且无法专注于EditText使用jogball.注意:点击它EditText 会将焦点集中在那一点,但是它依赖于触摸屏,这不是必需的.

ListView在这方面显然有两种模式:
1 setItemsCanFocus(true).:从不显示选择器,但EditText使用箭头时可以获得焦点.焦点搜索算法难以预测,并且没有选择哪个项目的视觉反馈(在任何行上:具有可聚焦儿童或不具有可聚焦儿童),这两者都可以给用户带来意想不到的体验.
2 setItemsCanFocus(false).:选择器始终以非触摸模式绘制,并且EditText永远无法获得焦点 - 即使您点击它也是如此.

更糟糕的是,调用editTextView.requestFocus()返回true,但事实上并没有给EditText带来焦点.

我想象的基本上是1和2的混合,而不是列表设置,如果所有项目都是可聚焦的,我想为列表中的单个项目设置可聚焦性,以便选择器从选择无缝转换不可聚焦项目的整行,以及遍历包含可聚焦子项的项目的焦点树.

任何接受者?

android android-layout android-listview android-edittext

120
推荐指数
5
解决办法
11万
查看次数

Firebase Analytics人口统计数据

Firebase Analytics信息中心会显示人口统计信息卡,包括年龄和性别.

根据https://support.google.com/firebase/answer/6317486?hl=zh-CN Firebase应自动收集年龄和性别.任何人都可以解释它如何收集这些信息,以及是否还需要做任何其他事情来提供它?

在我的信息中心,我没有看到任何年龄或性别数据.我还没有在firebase-analytics SDK中找到任何可以设置用户年龄或性别的公共API.

如果它来自广告客户ID,这是否意味着我们还必须与AdMob集成以获取该数据 - 如果我们不使用AdMob,那么年龄和性别是不可能收集的?在开始填充数据之前,AdMob是否还必须与Firebase项目相关联?

android firebase firebase-analytics

10
推荐指数
2
解决办法
4566
查看次数

使用错误的调用操作码进行Dalvik转换

我遇到了dalvik dex转换器和它用于调用方法的操作码的问题.基本上我有一个private final在我的类中定义的方法,并且在调用它时,而不是生成invoke-direct操作码,dx正在生成invoke-super.因为它是私有方法,所以超类上不存在该方法,因此我在设备上遇到VFY违规.我能够找到触发此事件的确切方案,并且似乎在以下情况下发生:

  1. 使用JaCoCo来测试课程,以及
  2. 编译的类 --target 1.6

如果满足这两个条件,则生成的dex类invoke-super代替invoke-direct.如果我禁用JaCoCo OR,如果我编译--target 1.5,它使用正确的invoke-direct操作码.

在查看javap反汇编的类代码时,我可以看到导致dx超级而不是直接的原因:

没有检测,编译为1.6:

$ javap -d com.example.ClassName | grep waitForConnectivity
159:    invokespecial   #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | grep waitForConnectivity
147ad8: 7010 6042 0200           |001e: invoke-direct {v2}, Lcom/example/ClassName;.waitForConnectivity:()V // method@4260
Run Code Online (Sandbox Code Playgroud)

检测,编译为1.5(--target 1.5):

$ javap -d com.example.ClassName | grep waitForConnectivity
235:    invokespecial   #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | …
Run Code Online (Sandbox Code Playgroud)

android dalvik jacoco

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

使用singleTop启动模式将活动结果转发给父级

我有两个活动:MainListActivity和DetailViewActivity.DetailViewActivity设置为android:launchMode="singleTop".

单击"主列表"活动中的项目时,它会通过以下方式启动"详细信息视图"活动:

startActivityForResult(detailIntent, REQUEST_CODE_DETAIL);
Run Code Online (Sandbox Code Playgroud)

如果我然后在Detail活动中调用setResult(RESULT_OK, resultData);,那么finish();"主列表"活动的onActivityResult(..)方法正确地接收了resultData .

但是,如果我在Detail活动中实现"see previous"/"see next"类型的导航,并使用singleTop实现它,则该结果不再被发送回初始活动:

Intent nextItemIntent = this.createIntent(nextId);
nextItemIntent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(nextItemIntent);
// at this point, my DetailActivity's onNewIntent() method is called, and the new data is loaded properly
Run Code Online (Sandbox Code Playgroud)

但在这里,当我打电话setResult(..)finish()我MainList活动永远不会收到新的/更新的结果.

谁知道我做错了什么?

android

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