我试图从服务调用一个活动(活动 A),我想要发生的是检查堆栈上是否已经有 A 的实例,如果有,将它带到堆栈的顶部(和触发 onNewIntent() 方法),而不是总是创建 A 的新实例。
想知道这是否可能。我的活动在 androidmanifest 中使用“singleTop”启动模式。从活动外部调用活动所需的通常 Intent.FLAG_ACTIVITY_NEW_TASK 标志不会将已经打开的活动 A 带到堆栈顶部,而是始终创建 A 的新实例。而且似乎当我同时使用两者时flags (intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 同样的事情发生了(仍然是同一活动的 2 个实例)。有没有办法做到这一点,请始终牢记我是从服务,我不想将活动上下文传递给服务?
(PS 我正在使用 androidannotations,对打开活动 A 的调用发生在 @EBean 内部,@EBean 本身在服务中使用。是否有一种简单的方法可以将该活动上下文传递给该 @EBean?)
是否可以将AndroidAnnotations与Scala编程语言和Gradle构建系统一起使用?当我尝试将AndroidAnnotations集成到我现有的Android/Scala/Gradle项目中时,编译失败,因为无法找到生成的下划线类(例如MyActivity_).
以下是一些有用的起点和参考:
我正在使用android注释,我正在尝试注释这个类,以便我可以使用@pref将值保存到我的共享首选项(带注释)类中.我已经设法找到了一个有意图和广播接收器的工作但是这不是理想的,现在我想从这个类中的共享首选项中获取一个值,以显示在微调器中选择的默认项目它开始给我的代码留下气味.
有没有办法注释这个类?
public class SelectNewsFeedDialog extends Dialog {
private Context context;
private Button confirmButton;
private Spinner spinnerTeams;
public SelectNewsFeedDialog(final Context context, ArrayList<Team> listTeams) {
super(context,R.style.cust_dialog);
this.context = context;
setContentView(R.layout.dialog_choose_news_feed);
spinnerTeams = (Spinner) findViewById(R.id.dialog_news_feed_spinner_teams);
confirmButton = (Button) findViewById(R.id.dialog_news_feed_button_confirm);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Team team = (Team)spinnerTeams.getSelectedItem();
Intent intent = new Intent(context, IntentCenter_.class);
intent.putExtra(context.getString(R.string.extra_update_team_news_feed), team.url.toString());
intent.setAction(context.getString(R.string.action_update_team_news_feed));
context.sendBroadcast(intent);
dismiss();
}
});
SpinnerTeamsAdapter adapter = new SpinnerTeamsAdapter(context, listTeams);
spinnerTeams.setAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud) 既然我决定在Android Studio中使用Android Annotations,我想通过Gradle实现它.经过一些深思熟虑的研究后,我发现有更旧的方法可以通过Gradle实现Android Annotations,具体取决于android studio,gradle或android注释的版本.我来到这个有用的教程 - > http://www.jayway.com/2014/02/21/androidannotations-setup-in-android-studio/,并试图实现这一点,首先,使用新的'android- L'作为目标SDK喜欢
targetSDKversion"android-L"+ compileSdkVersion 20 + buildToolsVersion"20.0.0"
直到我试着用它
targetSDKversion 20 + compileSdkVersion 20 + buildToolsVersion"20.0.0"
并且
targetSDKversion 19 + compileSdkVersion 19 + buildToolsVersion"19.1.0".
每次我得到2个警告,我的java类似乎没有得到预编译.即使它似乎预先创建了build/generated/source/apt目录.但没有我的MainActivity预处理类 - > MainActivity_
我总是得到以下警告:
注意:将日志文件解析为D:\ AndroidProjects\GradleTest\app\build\generated\source\apt\androidannotations.log注意:使用选项> {androidManifestFile = D:\ AndroidProjects\GradleTest\app\build \初始化AndroidAnnotations 3.0.1 intermediates\manifests\debug\AndroidManifest.xml,resourcePackageName = at.gradle.defuex.gradletest}
警告:类型'[dummy1407928544078]'的未闭合文件; 这些类型不会进行注释处理
警告:任何处理器都无法识别以下选项:'[androidManifestFile,resourcePackageName]'
我的build.gradle文件如下所示:
buildscript{
repositories{
mavenCentral()
}
dependencies{
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3'
}
}
repositories{
mavenCentral()
}
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "at.gradle.defuex.gradletest"
minSdkVersion …Run Code Online (Sandbox Code Playgroud) android gradle android-annotations android-studio android-gradle-plugin
我遇到的错误如下:
引起:java.lang.IllegalArgumentException:没有为Class绑定的进程工厂.注射器工厂被绑定为MyActivity_的超类型:[MyActivity].你的意思是绑定注射器工厂的子类型?
据我所知,这是因为我正在使用AndroidAnnotations库.
AppComponent.class:
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBindingModule.class })
public interface AppComponent extends AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance Builder application(Application application);
AppComponent build();
}
void inject(Application application);
@Override
void inject(DaggerApplication instance);
}
Run Code Online (Sandbox Code Playgroud)
AppModule.class:
@Module
public abstract class AppModule {
@Binds
abstract Context provideContext(Application application);
@Provides
@Singleton
static SharedPreferencesManager providesPreferences(Application application){
return SharedPreferencesManager_.getInstance_(application);
}
}
Run Code Online (Sandbox Code Playgroud)
ActivityBindingModule.class:
@Module
public abstract class ActivityBindingModule {
@ContributesAndroidInjector(modules = LoginActivityModule.class)
@LoginActivityScope
abstract LoginActivity bindLoginActivity();
}
Run Code Online (Sandbox Code Playgroud)
Application.class:
@EApplication …Run Code Online (Sandbox Code Playgroud) 我正在使用Saripaar验证库https://github.com/ragunathjawahar/android-saripaar来验证其中一个表单.该库非常有用,因为它避免了许多用于验证表单的样板代码.但是,该库在小部件上使用了通知.以下是一个例子:
@Password(order = 1)
@TextRule(order = 2, minLength = 6, message = "Enter at least 6 characters.")
private EditText passwordEditText;
Run Code Online (Sandbox Code Playgroud)
order属性是指定验证将发生的顺序的属性.这是我的问题:message属性采用常量表达式.我需要从字符串资源文件中设置它.因此,错误消息可以在以后进行国际化.我已经尝试过以下:
message = getResources().getString(R.string.err_msg)
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作,因为它需要编译时常量.
任何人都可以帮助我或通过解决方法指导我吗?
我有一段使用AndroidAnnotations的代码,它与下面的代码非常类似:
https://github.com/excilys/androidannotations/wiki/Adapters-and-lists
但是 - 我想将一个参数传递给List适配器以指定哪个列表 - 即
@AfterInject
void initAdapter() {
persons = personFinder.findAll(companyName);
}
Run Code Online (Sandbox Code Playgroud)
将companyName与Adapter相关联的最佳方法是什么?我不能使用带有AnroidAnnotations的构造函数 - 并且在父片段的@AfterViews之前调用@AfterViews,所以我不能再调用setter.
我目前已经破解了一个调用手动设置params然后刷新视图并删除了@AfterViews - 但是当我在层次结构中复制模式时它的讨厌和不可靠.
编辑
只需调用setter就可以在最简单的情况下工作 - 这就是我目前所拥有的.但在更复杂的情况下效果不佳.即
EFragment-> EViewGroup-> EBean ListAdapter
因为我不能使用构造函数,所以我必须等到渲染完整的层次结构并在片段告诉ViewGroup哪个公司显示公司信息之前进行布局,这反过来告诉ListAdapter哪个公司这样我可以得到哪些人,如果它变得非常混乱并且如果我的数据在网上 - 它可能会像90年代的网页那样渲染,它不需要花费太多精力.
我希望使用类似@Extras的东西 - 或者有办法传递@AfterInject的参数来使用,或者甚至只是将companyId放在片段上下文中而不将我的ListAdapter绑定到仅使用一种类型的片段......
使用AndroidAnnotations构建活动时遇到一些麻烦.我有一个名为TemplateActivity的父Activity:
@EActivity(R.layout.activity_template)
@NoTitle
public class TemplateActivity extends Activity
{
// some views
// ...
@ViewById(R.id.main_framelayout)
FrameLayout mainFrameLayout;
@AfterViews
public void postInit()
{
Log.d("DEBUG", "postInit"); // never called, strange...
}
public void setMainView(int layoutResID)
{
mainFrameLayout.addView(LayoutInflater.from(this).inflate(layoutResID, null));
}
}
Run Code Online (Sandbox Code Playgroud)
在我的第二个Activity中,我想用anoter layout xml填充mainFrameLayout,如下所示:
@EActivity
public class ChildActivity extends TemplateActivity
{
@Override
public void postInit()
{
super.postInit();
setMainView(R.layout.activity_child_one);
}
}
Run Code Online (Sandbox Code Playgroud)
当我想要startActivity时,我的ChildActivity是空白的,并且从未调用过postInit.谁能告诉我有什么问题?谢谢你提前.
配置Android注释非常令人厌烦.但我终于想出了一个解决方案,并希望与大家分享.
android android-annotations android-studio android-gradle-plugin
当我在gradle构建文件中激活androidannotations apt行时,不再识别数据绑定类.当我只是注释掉"apt ..."行时,一切都会再次编译.
可能是某种程度上android-annotions阻止数据绑定apt被执行?或者执行顺序是否错误?
此致,托马斯
gradle构建时出错:$ gradle clean build
:app:clean
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidDatabindingLibrary10Rc1Library
:app:prepareComAndroidSupportAppcompatV72300Library
:app:prepareComAndroidSupportCardviewV72300Library
:app:prepareComAndroidSupportDesign2300Library
:app:prepareComAndroidSupportMultidex101Library
:app:prepareComAndroidSupportRecyclerviewV72300Library
:app:prepareComAndroidSupportSupportV42300Library
:app:prepareComJourneyappsZxingAndroidEmbedded302Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-mdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-xhdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-hdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
:app:processDebugManifest
:app:dataBindingLayoutsProcessDebugResources
:app:processDebugResources …Run Code Online (Sandbox Code Playgroud)