小编sto*_*986的帖子

如何实现自定义AlertDialog视图

AlertDialog上Android文档中,它提供了以下用于在AlertDialog中设置自定义视图的说明和示例:

如果要显示更复杂的视图,请查找名为"body"的FrameLayout并将视图添加到其中:

FrameLayout fl = (FrameLayout) findViewById(R.id.body);
fl.add(myView, new LayoutParams(FILL_PARENT, WRAP_CONTENT));
Run Code Online (Sandbox Code Playgroud)

首先,非常明显的是这add()是一个错字,并且意味着addView().

我对使用R.id.body的第一行感到困惑.它似乎是AlertDialog的body元素......但是我不能在我的代码中输入它b/c它会产生编译错误.R.id.body在哪里被定义或分配或者其他什么?

这是我的代码.我试图setView(findViewById(R.layout.whatever)在构建器上使用但它没有用.我假设因为我没有手动充气吗?

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title")
    .setCancelable(false)
    .setPositiveButton("Go", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int id) {
        EditText textBox = (EditText) findViewById(R.id.textbox);
        doStuff();
    }
});

FrameLayout f1 = (FrameLayout)findViewById(R.id.body /*CURRENTLY an ERROR*/);
f1.addView(findViewById(R.layout.dialog_view));

AlertDialog alert = builder.create();
alert.show();
Run Code Online (Sandbox Code Playgroud)

android android-alertdialog

105
推荐指数
6
解决办法
21万
查看次数

AsyncTask线程规则 - 真的只能使用一次吗?

AsyncTask文档中,它提供了以下与线程相关的规则:

  • 该任务只能执行一次(如果尝试第二次执行,则会抛出异常.)

所有这些意味着你每次想要使用它时都必须创建一个新的类实例,对吧?换句话说,必须这样做:

new DownloadFilesTask().execute(url1, url2, url3);
new DownloadFilesTask().execute(url4, url5, url6);
Run Code Online (Sandbox Code Playgroud)

或者相反,您不能执行以下操作:

DownloadFilesTask dfTask = new DownloadFilesTask();
dfTask.execute(url1, url2, url3);
dfTask.execute(url4, url5, url6);
Run Code Online (Sandbox Code Playgroud)

有人可以验证这是一个准确的解释吗?

我知道自己刚刚给自己解答了这个问题,因为我正在输入这个......但是对我来说并不是很明显,所以我认为尽管如此,这仍然很有用.

android android-asynctask

46
推荐指数
2
解决办法
9804
查看次数

包含调试代码的最佳方法?

我正在编写Android应用程序,这里最好的方法可能与一般的Java相同或不同.

我只是希望能够设置一个调试标志,当它设置为true时只执行某些代码部分 - 相当于C++设置预处理器#define DEBUG并使用#ifdef DEBUG.

在Java中有没有可接受的或最好的方法来实现这一目标?

现在我只是在我的Application对象中设置一个变量,但我不认为这是最好的方法.

java debugging android buildconfig

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

在开始新活动后调用finish()

在我的应用程序中加载的第一个Activity是一个初始化活动,一旦完成,它就会加载一个新的Activity.我想确保如果用户按下"后退",他们会直接进入启动器,而不是初始化屏幕.旁注,这是最好的方法,还是用某种Intent Flag做得更好?

在新活动上调用startActivity()之后调用finish()是否正确?

onCreate() {
...
startActivity(new Intent(this, NextActivity.class));
finish();
...
}
Run Code Online (Sandbox Code Playgroud)

我仍然采用整个'Message Queue'方法在Android中做事,我的假设是从我的第一个Activity的onCreate()调用startActivity()然后finish ()将记录消息队列中的每个相应消息,但是在继续开始下一个Activity并完成我的第一个Activity之前完成onCreate()的执行.这是正确的理解吗?

android message-queue android-activity

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

确定当前设备上是否存在活动?

有没有办法检查并查看您的设备上是否存在活动?如果我有YouTube视频链接,我想在YouTube PlayerActivity中指定它.但是,如果由于某种原因他们没有它,我不想崩溃.

有没有办法检查并查看活动是否存在?我不认为我可以捕获运行时异常,因为startActivity()不会抛出它.

android android-activity

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

静态嵌套类可以多次实例化吗?

鉴于我所知道的其他类型的静态编程功能 - 我认为答案是'不'.然而,看到这样的陈述OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();让我感到奇怪.

java static nested-class

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

具有自签名SSL证书问题的HTTPS ...解决方案还是更好的方法?

我需要做的就是从具有自签名SSL证书的Web服务器下载一些基于文本的基本文件和图像文件.

我一直试图弄清楚如何使用HttpClient来做到这一点,但让SSL工作是一场噩梦,这对于这么简单的任务来说似乎太麻烦了.

有没有更好的方法来执行这些文件下载?也许通过WebView或浏览器功能?重新制作一个简单的HTTPS GET请求是一个很大的痛苦,并且显着地阻碍了我的开发计划.

https android download self-signed

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

按Back会导致Activity完成()吗?

我听说按下后退按钮基本上会导致当前的Activity finish().总是这样吗?看起来就像它将Activity弹出堆栈的方式一样.

我不太确定的一种情况是当任务中的根活动被按下时.我目前正在经历一种非常奇怪的效果,描述如下:

在加载我的应用程序时,第一个Activity用于初始化,一旦完成,它将调用我的主Activity(TabActivity).这个第一个init活动在Manifest中设置了android:noHistory ="true",所以从我的主Activity中按回来将不会回到那个.它发送到启动器.当我第二次在Launcher中单击我的应用程序时,初始化活动再次加载,并在完成后加载主Activity.几乎在紧接着之后,它会加载我的主Activity的第二个实例.但是只有在应用程序已经运行一次之后,并且通过从主Activity中按BACK退出.它会在以后强制退出应用程序或从IDE加载新版本.

基于此,我怀疑某种Activity实例正在四处闲置并被重用,因为它只发生在我运行应用程序的第二个+时间(并使用BACK退出 - 使用HOME只返回到应用程序的最后状态,没什么大不了).任何人都有任何想法?

lifecycle android android-activity

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

Activity.finish()上的AsyncTask仍然在后台运行会发生什么?

Activity.finish()上的AsyncTask仍然在后台运行会发生什么?

它是否只是将Activity从活动堆栈中弹出,但等待销毁Activity对象,直到AsyncTask完全完成(因为AsyncTask是我的Activity的内部类)?

另外,如果AsyncTask是一个公共的非内部类,它没有引用Activity的实例,它会采取什么不同的行为吗?

android android-asynctask android-activity

15
推荐指数
1
解决办法
7593
查看次数

Android:退出Looper?

我有一个线程,我用来定期更新我的Activity中的数据.我创建线程并启动一个looper以使用处理程序postDelay().在我的活动的onDestroy()中,我在我的处理程序上调用removeCallbacks().

我应该打电话handler.getLooper().quit()吗?或者不用担心它,让操作系统处理它?或者它会永远运行,消耗CPU周期?

multithreading android message-queue handler

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