在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) 在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应用程序,这里最好的方法可能与一般的Java相同或不同.
我只是希望能够设置一个调试标志,当它设置为true时只执行某些代码部分 - 相当于C++设置预处理器#define DEBUG并使用#ifdef DEBUG.
在Java中有没有可接受的或最好的方法来实现这一目标?
现在我只是在我的Application对象中设置一个变量,但我不认为这是最好的方法.
在我的应用程序中加载的第一个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()的执行.这是正确的理解吗?
有没有办法检查并查看您的设备上是否存在活动?如果我有YouTube视频链接,我想在YouTube PlayerActivity中指定它.但是,如果由于某种原因他们没有它,我不想崩溃.
有没有办法检查并查看活动是否存在?我不认为我可以捕获运行时异常,因为startActivity()不会抛出它.
鉴于我所知道的其他类型的静态编程功能 - 我认为答案是'不'.然而,看到这样的陈述OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();让我感到奇怪.
我需要做的就是从具有自签名SSL证书的Web服务器下载一些基于文本的基本文件和图像文件.
我一直试图弄清楚如何使用HttpClient来做到这一点,但让SSL工作是一场噩梦,这对于这么简单的任务来说似乎太麻烦了.
有没有更好的方法来执行这些文件下载?也许通过WebView或浏览器功能?重新制作一个简单的HTTPS GET请求是一个很大的痛苦,并且显着地阻碍了我的开发计划.
我听说按下后退按钮基本上会导致当前的Activity finish().总是这样吗?看起来就像它将Activity弹出堆栈的方式一样.
我不太确定的一种情况是当任务中的根活动被按下时.我目前正在经历一种非常奇怪的效果,描述如下:
在加载我的应用程序时,第一个Activity用于初始化,一旦完成,它将调用我的主Activity(TabActivity).这个第一个init活动在Manifest中设置了android:noHistory ="true",所以从我的主Activity中按回来将不会回到那个.它发送到启动器.当我第二次在Launcher中单击我的应用程序时,初始化活动再次加载,并在完成后加载主Activity.几乎在紧接着之后,它会加载我的主Activity的第二个实例.但是只有在应用程序已经运行一次之后,并且通过从主Activity中按BACK退出.它会在以后强制退出应用程序或从IDE加载新版本.
基于此,我怀疑某种Activity实例正在四处闲置并被重用,因为它只发生在我运行应用程序的第二个+时间(并使用BACK退出 - 使用HOME只返回到应用程序的最后状态,没什么大不了).任何人都有任何想法?
Activity.finish()上的AsyncTask仍然在后台运行会发生什么?
它是否只是将Activity从活动堆栈中弹出,但等待销毁Activity对象,直到AsyncTask完全完成(因为AsyncTask是我的Activity的内部类)?
另外,如果AsyncTask是一个公共的非内部类,它没有引用Activity的实例,它会采取什么不同的行为吗?
我有一个线程,我用来定期更新我的Activity中的数据.我创建线程并启动一个looper以使用处理程序postDelay().在我的活动的onDestroy()中,我在我的处理程序上调用removeCallbacks().
我应该打电话handler.getLooper().quit()吗?或者不用担心它,让操作系统处理它?或者它会永远运行,消耗CPU周期?
android ×9
java ×2
buildconfig ×1
debugging ×1
download ×1
handler ×1
https ×1
lifecycle ×1
nested-class ×1
self-signed ×1
static ×1