小编Bud*_*ius的帖子

IntelliJ IDEA中的注释处理器编译

我正在使用最新版本的IntelliJ IDEA(13.1.4),我正在开发自己的自定义注释.

我目前在我的项目中有两个模块

  • MyOwnCustomAnnotationProcessor(这里我有实际的处理器)
  • MyOwnCustomAnnotationProcessorTest(这个我基本上有几个类注释,看它是否都生成正常)

我在Eclipse工作,但我正在尝试迁移IntelliJ,因为我无法忍受Eclipse.我设法通过让Ant构建生成主项目的.jar文件并且Test类将使用此.jar来使它在Eclipse中有点工作.

但是我不能让它在IntelliJ上工作.

Settings -> Compiler -> Annotation Processor我有一个新的配置文件中,测试项目在此配置文件中,配置文件如下:

注释处理器屏幕

我也尝试过更改Processor Path输出文件夹(其中有类META-INF),但没有运气.该generated文件夹由IDE创建,但它找不到任何处理器.

关于如何在这里进行的任何提示?

java annotations intellij-idea

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

getWindow().setSoftInputMode 未按预期工作

在我的 Android 项目中,我希望softInputMode只有一个片段是adjustPan.

将以下行添加到我的清单(在活动内)按预期工作:

android:windowSoftInputMode="adjustPan"
Run Code Online (Sandbox Code Playgroud)

但是我片段中的以下几行什么都不做:

@Override
public void onResume() {
   super.onResume();
   getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
}

@Override
public void onPause() {
    super.onPause();
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);
}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样以及可以做些什么来解决?

android android-layout android-softkeyboard

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

使用多模块android库进行Gradle配置

回到历史

我有这个aar开发人员可以正常使用的android库

compile 'com.companyname.sdk:android-sdk:2.x'
Run Code Online (Sandbox Code Playgroud)

现在我们正在从头开始重新编写库来创建V3.

在这次重新组织中,我们设法将lib分解为模块.所以可以说在V3上我们会有以下工件

compile 'com.companyname.sdk:core:3.x'
compile 'com.companyname.sdk:extra_1:3.x'
compile 'com.companyname.sdk:extra_2:3.x'
compile 'com.companyname.sdk:extra_ ....
Run Code Online (Sandbox Code Playgroud)

这将在gradle结构上给出以下模块:

root:
  |- test_app (apk just for testing, not deployed anywhere)
  |- sdk (aka: core)
  |- extra_1
  |- extra_2
  |- extra_ ... etc
Run Code Online (Sandbox Code Playgroud)

每个extra在他们的模块build.gradle有一个provided (':sdk'),这样可以使用一切从sdk模块,但不实际编译它自己内部.

但我还想为现有的主机应用程序提供一个简单的迁移路径.意思是,我想在V3上也有以下的神器组合coreextra_1(它基本上是V2上的当前内容).

compile 'com.companyname.sdk:android-sdk:3.0.0'
Run Code Online (Sandbox Code Playgroud)

这一切听起来都很理论,但是我很难把它想象成一个gradle结构,让我轻松导出所有这些.

我想要实现的目标

所以我希望能够在构建期间生成以下工件:

  • android-sdk包括coreextra_1
  • core
  • extra_1
  • ......所有其他额外的东西

我试过了什么

  • 添加一个名为的额外模块legacy,com.android.library无需任何代码即可应用,并compile project为其他模块添加.它会生成一个空的aar

  • 使用两个模块中的sourceSets添加核心/旧版buildTypes.从未生成2aar …

android gradle android-library android-gradle-plugin aar

6
推荐指数
1
解决办法
1091
查看次数

Android版Apollo GraphQL中的重复对象类型

在我的项目GraphQL模式上,对象AllowedPeriod(只有两个字段startsAt / endsAt)可以到达图形的不同对象内。

生成查询时,apollo会为每个查询创建一个新类型 <parent_object>.AllowedPeriod

例如,在GetDevicesQuery中,AllowedPeriod可以是内部devicesactions或者group,因此产生以下的类。

  • GetDevicesQuery.AllowedPeriod
  • GetDevicesQuery.AllowedPeriod1
  • GetDevicesQuery.AllowedPeriod2

有没有办法告诉阿波罗这些类型是相同的类型,并且不应该为每个类型生成类型?

android apollo graphql apollo-client apollo-android

6
推荐指数
1
解决办法
274
查看次数

调用startActivity()时DialogFragment崩溃活动

我有一个DialogFragment应该是简单的,但它给了我一些特别关于果冻豆的大问题.

该应用程序使用网络,它弹出一个对话框,要求用户打开WiFi或取消然后关闭它.因此它扩展DialogFragment并创建视图:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog a = new AlertDialog.Builder(getActivity()).setCancelable(true).setTitle(R.string.dialog_title_disabled)
            .setMessage(R.string.dialog_text)
            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dismiss();
                        Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
                        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(i);
                    }
            }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        getActivity().finish();
                    }
            }).create();
    //a.setCanceledOnTouchOutside(false);
    return a;
}
Run Code Online (Sandbox Code Playgroud)

如果用户单击"是",则会取消对话框并打开"无线设置"活动.或者,如果用户单击"取消",它只会关闭我的整个活动,但是在Jelly Bean上,只要我单击"是",它就会打开"设置",但应用程序强制将关闭并显示以下错误:

08-05 20:24:22.584: E/AndroidRuntime(2579): java.lang.IllegalStateException: Failure saving state: active SettingsDialogFragment{425dd550} has cleared index: -1
08-05 20:24:22.584: E/AndroidRuntime(2579):     at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1653)
Run Code Online (Sandbox Code Playgroud)

还有一些额外的日志记录显示了我布局中每个片段的已保存状态,而应该是的数字2 SettingsDialogFragment只是null …

android android-intent android-dialogfragment

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

如何检测 Android O 的进程前台

在我们的应用程序中,有一个服务通常在Application.OnCreate(直接调用context.startService)期间启动,稍后通过AlarmManager(正在进行重构以将其某些工作迁移到 JobScheduler)。

我们的应用程序也有一个BroadcastReceiver以其直接意图启动的。

鉴于 Android Oreo ( https://developer.android.com/about/versions/oreo/android-8.0-changes.html ) 中的新限制,我们遇到了如下问题:

  • 应用程序/进程在后台/已死
  • BroadcastReceiver 被操作系统触发
  • Application.onCreate() 在 BroadcastReceiver 之前执行
  • Application.onCreate() 代码尝试运行服务

这会导致“IllegalStateException: Not allowed to start service Intent”崩溃。

我知道 CommonsWare 在此处/sf/answers/3115400361/所回答的启动服务的新推荐方法,但对于这种特定情况,我只想将if(process in foreground) { startService }. 我目前正在使用以下方法,它似乎有效:

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private static boolean isProcessInForeground_V21(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.AppTask> tasks = am.getAppTasks();
        return tasks.size() > 0;
    }
Run Code Online (Sandbox Code Playgroud)

但我找不到 Android Oreo 正在做的确切检查(我到这里为止https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ContextImpl.startServiceCommon方法上的java,但从那里requireForeground标志似乎转到了一些本机实现)

所以我的问题: …

android android-broadcastreceiver android-8.0-oreo

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

滚动listView后,convertView会丢失onitemClick

我的适配器上有一个有点奇怪的错误.适配器正在创建的视图是左侧的缩略图和带有几行的表.每行有两个textview.

其中一个textview具有android:autoLink="web"属性集,listview上有一个onItemClickListener.

问题是,每当TextView自动链接它的内容时,下次转换其父视图时,它就不再从onItemClickListener接收点击.

让我用一个例子来澄清:

  • view1,view2,view3和view4位于屏幕上的列表视图中.
  • view2有一个链接,它出现,并点击该链接打开.
  • 项目单击对于view1,view 3和view4正常工作.
  • 滚动列表视图,view1转换为position5,然后view2转换为position6.
  • position6处的项目不包含链接,但也不会为position6元素触发onItemClick.

textview的自动链接功能肯定会改变我的布局,但我不知道是什么.在我的适配器上每次调用getView时都必须重置一个属性,但是哪个?

谢谢你的帮助.

编辑

让我们看一些代码,这是非常标准/良好的做法.来自我的适配器的getView是:@Override public View getView(int position,View convertView,ViewGroup parent){

    // Inflate a new layout if needed
    if (convertView == null)
        convertView = createNewView();

    // Gets the item from my array
    AGplus item = (AGplus) getItem(position);
    // Gets the holder pointing to the views
    Holder h = (Holder) convertView.getTag();
    // That's a test version, I won't be using date.toString() later on
    h.date.setText(new Date(item.getDate()).toString());
    // This guys is giving …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-adapterview

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

是否可以在ActionBar上使用TransitionDrawable?

我正在尝试使用TransitionDrawable在操作栏上执行一些颜色动画.

我正在尝试的代码非常简单,在onCreate期间,我将过渡drawable作为actionbar背景:

Drawable d = getResources().getDrawable(R.drawable.actionbar);
actionbarDrawable = new TransitionDrawable(new Drawable[] { d, d });
getActionBar().setBackgroundDrawable(actionbarDrawable);
Run Code Online (Sandbox Code Playgroud)

然后在事件上我替换了TransitionDrawable的第二个drawable并要求为它设置动画.

    actionbarDrawable.setDrawableByLayerId(1, d);
    actionbarDrawable.startTransition(666);
Run Code Online (Sandbox Code Playgroud)

我在我的活动上的RelativeLayout上尝试了相同的代码,它似乎工作正常,为什么ActionBar不想合作的任何想法以及如何使其工作?

谢谢.

android android-animation android-actionbar transitiondrawable

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

删除kotlin中的"this"回调

我有点kotlin新手,我正在尝试删除回调本身内部的回调实例.

我正在尝试实现它的东西类似于以下代码.

private val myCallback = SomeInterfaceType {
   if(it.something) {
        someObject.removeListener(this@SomeInterfaceType)
   }
}
Run Code Online (Sandbox Code Playgroud)

当然它不会编译,否则我不会在这里问.所以我问,如何从界面实例中删除回调?

编辑: 错误是"推断类型是X但Y是预期的.

编辑2:我刚刚意识到我问过错误的问题,它与它类似但不完全是一个接口.

我正在使用的对象具有以下构造函数/接口

public open class Watcher<T> public constructor(call: (T) -> kotlin.Unit)

所以实际上我试图从里面引用Watcher call: (T) -> kotlin.Unit来移除听众.

那可能吗?

android kotlin

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

NotifyDataSetChanged在我的代码中不起作用

adapter.notifyDataSetChanged(); 我没有在android中工作我正在检索for循环中的值,但值没有显示在屏幕上.我的java文件:

private static final String TAG_NAME="Notification";
String[] resultsAsString = {""};
ListView listView;
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, resultsAsString);
    ParseQuery<ParseObject> parseObjectParseQuery=new ParseQuery<ParseObject>("PushNotifications");
    parseObjectParseQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if (e==null){
                resultsAsString = new String[objects.size()];
                Log.d(TAG_NAME,"Objects size in MyService is:"+objects.size());

                if(objects.size()>0){
                    Log.d(TAG_NAME,"Object size is "+objects.size());
                    for(int index = 0; index < objects.size(); index++){
                        resultsAsString[index] = objects.get(index).getString("Message");
                        Log.d(TAG_NAME,"result value is:"+resultsAsString[index]);
                    }
                    adapter.notifyDataSetChanged();
                }else {
                    Log.d(TAG_NAME,"Object size is "+objects.size());
                }
            }
        }
    });
listView = (ListView) …
Run Code Online (Sandbox Code Playgroud)

android listview android-arrayadapter

0
推荐指数
1
解决办法
274
查看次数