小编aro*_*ero的帖子

片段未接收菜单回调

我有一个片段类扩展Fragment并调用setHasOptionsMenu参与菜单.这个类也实现了onCreateOptionsMenu,onPrepareOptionsMenuonOptionsItemSelected.

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        ....
}
Run Code Online (Sandbox Code Playgroud)

我正在使用FragmentTransaction我的Activity(扩展FragmentActivity)动态加载这个片段.

但是没有调用任何菜单回调(onCreateOptionsMenu,onPrepareOptionsMenuonOptionsItemSelected)(我在这些方法中调试了一些断点)并且未显示菜单.

我错过了什么吗?我需要在我的活动中添加一些内容吗?

我正在使用Android兼容性库,使用L11 SDK进行编译并在Xoom中进行测试.

编辑:我发现了问题.我的AndroidManifest目标是L11,这似乎隐藏了菜单按钮并阻止调用回调.但是,如果我从清单中删除它,我会丢失一些我需要的其他功能(例如列表中的激活状态).有没有人知道如何解决这个问题(启用菜单按钮)而不targetSdkVersion=11从清单中删除?

android fragment android-fragments

40
推荐指数
6
解决办法
3万
查看次数

Android Picasso库,如何添加身份验证标头?

我尝试使用自定义身份验证器设置自定义OkHttpClient,但是正如文档所说:"响应来自远程Web或代理服务器的身份验证挑战." 我必须为每个图像发出2个请求,这并不理想.

有像Retrofit这样的请求拦截器吗?或者我在OkHttpClient中遗漏了什么?

我正在使用最新版本:

compile 'com.squareup.picasso:picasso:2.3.2'
compile 'com.squareup.okhttp:okhttp:2.0.+'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.+'
compile 'com.squareup.okio:okio:1.0.0'
Run Code Online (Sandbox Code Playgroud)

谢谢!

android picasso okhttp

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

Android Widgets:RemoteViews上的动画?

我没有太多成功将动画应用于视图中的视图RemoteViews.

为了简单起见,假设我有一个带有a ImageView和a 的小部件Button.单击按钮时,我想向ImageView添加一个简单的动画(例如旋转).

因为我不能findViewById()像在an中那样使用Activity并且RemoteViews没有动画的setter,所以我不知道该怎么办.

我正在考虑使用新的布局替换窗口小部件的RemoteViews,类似于原始布局,但是这个已经加载了动画.我可以这样做吗?是否可以在布局中嵌入动画?

对于WidgetProvider,代码将是这样的:

Intent intent = new Intent(context, RotateService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.a_widget);
views.setOnClickPendingIntent(R.id.a_button, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, views);
Run Code Online (Sandbox Code Playgroud)

然后在RotateService中:

ComponentName myWidget = new ComponentName(this, MyWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
RemoteViews newViews = buildNewRemoteViewsWithAnimation();
manager.updateAppWidget(myWidget, newViews);
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?

animation android widget android-widget

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

ListView项目选择状态不起作用

所以我有一个ListView,我想改变每个项目背景和文本的颜色.此ListView位于ListFragment中.我的代码膨胀了布局,onCreateView并膨胀了每个项目的布局newView.

android:state_pressed="true"工作正常,每当我在一个项目按背景变为彩色.但是当选择一个项目时,bg颜色或文本颜色都没有变化,即使我已经android:state_selected="true"在选择器中定义了一个项目.

编辑:我正在使用SDK级别11(Android 3.0)和摩托罗拉Xoom.

列表片段布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

列表项布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="25dp"
    android:background="@drawable/list_item_bg_selector">
    <TextView android:id="@+id/form_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_xlarge"
        android:textStyle="bold"
        android:textColor="@drawable/list_item_text_selector" />
    <TextView android:id="@+id/form_subtitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_medium"
        android:textStyle="normal"
        android:layout_marginTop="5dp"
        android:textColor="@drawable/list_item_text_selector" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

背景选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_pressed="true"
        android:drawable="@color/white" />
    <item
        android:state_selected="true"
        android:drawable="@drawable/list_item_bg_selected" />
    <item 
        android:drawable="@color/list_bg" />
</selector>
Run Code Online (Sandbox Code Playgroud)

文字选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@color/white" /> …
Run Code Online (Sandbox Code Playgroud)

android listview android-layout

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

使用Jenkins声明性管道为dockerfile代理设置构建args

我正在使用声明性管道语法在docker容器中执行一些CI工作.

我注意到Jenkins的Docker插件使用主机中jenkins用户的用户ID和组ID运行一个容器(即如果jenkins用户有用户ID 100和组ID 111,它将运行管道创建一个容器,命令docker run -u 100:111 ...).

我遇到了一些问题,因为容器将与非现有用户一起运行(特别是我遇到了一些没有主目录的用户的问题).所以我想创建一个Dockerfile,它将接收用户id和组ID作为构建参数,并在容器内创建一个合适的jenkins用户.Dockerfile看起来像这样:

FROM ubuntu:trusty
ARG user_id
ARG group_id

# Add jenkins user
RUN groupadd -g ${group_id} jenkins
RUN useradd jenkins -u ${user_id} -g jenkins --shell /bin/bash --create-home
USER jenkins

...
Run Code Online (Sandbox Code Playgroud)

dockerfile代理有一个additionalBuildArgs属性,所以我可以读取主机中jenkins用户的用户ID和组ID,并将它们作为构建aguments发送,但我现在遇到的问题似乎是没有办法执行这些命令在指定代理之前的声明性管道中.我希望我的Jenkinsfile是这样的:

// THIS WON'T WORK
def user_id = sh(returnStdout: true, script: 'id -u').trim()
def group_id = sh(returnStdout: true, script: 'id -g').trim()

pipeline {
  agent {
    dockerfile {
      additionalBuildArgs "--build-arg user_id=${user_id} --build-arg group_id=${group_id}"
    }
  }
  stages {
    stage('Foo') {
      steps …
Run Code Online (Sandbox Code Playgroud)

jenkins docker dockerfile

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

平铺的背景正在推动它的视图大小

我有一个平铺的位图,我用它作为View背景.这View,让我们说,有android:layout_height="wrap_content".问题是背景中使用的位图的高度参与视图的测量,增加了View高度.当内容的大小View小于用作图块背景的位图的高度时,可以注意到这一点.

让我举个例子.tile位图:

在此输入图像描述

位图drawable(tile_bg.xml):

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/tile"
    android:tileMode="repeat"/>
Run Code Online (Sandbox Code Playgroud)

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#FFFFFF">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/tile_bg"
        android:text="@string/hello"
        android:textColor="#000000" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

看起来如何:

在此输入图像描述

的高度TextView最终被位图的高度.我期待的是位图被剪裁到的大小View.

有没有办法实现这个目标?

笔记:

  • 我无法使用9patch drawables,因为背景需要以瓷砖方式重复,拉伸不是一种选择.
  • 我不能设置一个固定的高度View,这取决于孩子们(我在使用这个ViewGroup)
  • 这个奇怪的行为就像我之前解释的那样,当它的大小View小于位图的大小时,否则位图会被正确地重复剪切(即,如果视图大小是位图大小的1.5倍,你最终会看到位图的1.5倍).
  • 该示例处理高度,但使用宽度是相同的.

android android-layout

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

实施C2DM注册的最佳实践

我正在开发一个使用C2DM来接收推送通知的应用程序.我已经实现了整个C2DM电路(客户端和服务器),它工作正常.

目前,我的应用程序有一个按钮来引导C2DM注册,当从Google收到注册ID令牌时,我会在我的应用服务器中调用webservice以将设备与注册ID相关联.

我将在我的应用程序中实现身份验证,并且我有一些与C2DM注册处理相关的问题.

  1. 客户端应用程序(即Android版)将具有登录屏幕作为第一屏幕,因此用户可以输入凭证.一旦凭证得到验证,我就打算调用C2DM注册,以便用户与注册ID令牌相关联.这个可以吗?在以后的应用程序执行中,我可能会存储凭据或某种令牌,因此用户无需再次输入凭据,我是否还应该在应用程序启动时触发C2DM注册?
  2. 我知道Google最终可能会更新注册ID.定期更新注册ID是一种好习惯吗?如果是的话,什么时候应该合适?注册ID令牌是否过期?
  3. 在客户端和服务器之间的注册ID失去同步的罕见情况下会发生什么(例如,新的注册ID到达客户端,在具有旧注册ID的服务器上触发新事件的中间,然后注册ID到达服务器)?谷歌会处理这种情况吗?我的app服务器应该处理这种情况吗?
  4. 当新的注册ID从Google到达时,如果无法访问服务器会发生什么?我应该退避并安排警报再试一次吗?
  5. 你能想到其他任何陷阱吗?

android web-services android-c2dm

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

有没有办法急于加载多态关联的关联?

艺术家有很多活动(基本上是用户之间的互动缓存):

class Activity < ActiveRecord::Base

  belongs_to :receiver, :class_name => 'Artist', :foreign_key => :receiver_id #owns the stuff done "TO" him
  belongs_to :link, :polymorphic => true
  belongs_to :creator, :class_name => 'Artist', :foreign_key => :creator_id #person who initiated the activity

end
Run Code Online (Sandbox Code Playgroud)

例如:

  Activity.create(:receiver_id => author_id, :creator_id => artist_id, :link_id => id, :link_type => 'ArtRating') 
Run Code Online (Sandbox Code Playgroud)

我想为每位艺术家创建一个活动流页面,包括不同类型的活动列表,ArtRatings(喜欢,不喜欢),收藏,关注等.

控制器看起来像这样:

class ActivityStreamController < ApplicationController
  def index
    @activities = @artist.activities.includes([:link,:creator,:receiver]).order("id DESC").limit(30)
  end
end
Run Code Online (Sandbox Code Playgroud)

db调用正确地急切地加载多态链接对象:

  SELECT "activities".* FROM "activities" WHERE (("activities"."receiver_id" = 6 OR "activities"."creator_id" = 6)) ORDER BY …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails polymorphic-associations eager-loading

8
推荐指数
2
解决办法
3264
查看次数

Android SQL:检查数据库中的记录是否存在

我试图根据特定的ID查询我的数据库.

String sql = "SELECT * FROM mash WHERE recipe_id = '" + id + "'";
Cursor data = database.rawQuery(sql, null);
Run Code Online (Sandbox Code Playgroud)

如果这是第一次运行活动,则表将与id列一起存在,但不会有具有特定ID的记录.如何检查该特定记录是否存在,如果不存在,请添加它?关于检查特定列是否存在,我发现了很多内容,但没有关于检查特定记录是否存在的信息.

到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但它实际上由于某种原因返回1.我可以在if语句中使用什么来验证是否尚未创建id列?

sql android

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