Android 活动文档中的一个片段(向下滚动到" 前景生命周期 "行)说:
活动可以频繁地进出前台 - 例如,
onPause()当设备进入睡眠状态或出现对话框时调用.
我不太明白这一点.在什么情况下会发生这种情况?被onPause()称为仅如果有问题的对话的上下文是从顶部其活性的对话框将显示不同?
通过文档中的上述引用,onPause()当下面代码中的AlertDialog(或只是Dialog)显示时,我的activity的方法是否会被调用?显示对话框时,我应该看到"onPause called"日志条目吗?
但我不认为会发生这种情况.它也不应该,如果我已正确理解Android生命周期!那么,文件指向的是什么呢?
public class LifeCycleTestActivity extends Activity {
private static final String TAG = "LifeCycleTest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick");
AlertDialog dialog = new AlertDialog.Builder(LifeCycleTestActivity.this).create();
dialog.setMessage("You Clicked on the …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚withValueBackReference的确切语义.
我已经使用这种方法读取了示例代码(例如添加新联系人的代码),提供了backReference值为0.这是什么意思?
文件说:
后引用的列值优先于withValues(ContentValues)中指定的值
Android开发者网站上有一篇很棒的文章介绍了如何使用接口进行通信:
Fragment和它的托管ActivityFragment由同一个主持Activity我正在努力将这个概念应用于嵌套片段.特别是,getActivity()或Fragment#onAttach(Activity)告诉你什么Activity是托管Fragment.
嵌套片段的等价物是什么?"孩子"如何Fragment知道Fragment它包含在哪个"父母" 中?如果不知道这一点,孩子如何Fragment将事件传递给其父母Fragment?
一个显而易见的方法是播放来自孩子的意图Fragment并让父母Fragment听取广播,但我宁愿使用interface基于-based的方法.
我试图了解如何使用Fragments创建适应多个屏幕和布局的应用程序.我研究了几个例子:
所有这些都提倡多种Activity方法:
Activity具有多个Fragments 的单个屏幕Fragments 分成多个Activitys.我想到了另一种方法 - 一个方法Activity:
Activity的所有Fragments.Fragment的(使用FragmentTransaction.show()/ FragmentTransaction.hide()).为了说明Android开发人员指南使用的相同"新闻文章列表/文章内容"示例:
News活动同时包含ArticleListFragment和ArticleReaderFragment.ArticleReaderFragment最初是隐藏的.从列表中选择文章时,将ArticleListFragment隐藏该文章ArticleReaderFragment并显示该文章.有没有人用过类似的方法?这种方法可能有什么实际缺点吗?与多活动方式相比,它看起来更好/更差吗?例如,片段无法在XML中显示/隐藏 - 必须使用FragmentTransaction它.
想象一下,一个应用程序可以在屏幕上一次显示多达三个"窗格".此外,这些是要考虑的因素:
为简单起见,让我们不要讨论电视屏幕.
现在,将其翻译为设计:
到目前为止,我们没有考虑任何与Android开发人员指南中提供的新闻阅读器示例明显不同的内容.唯一的主要区别是有 …
我有一个CursorLoader直接使用SQLite数据库而不是使用的自定义ContentProvider.这个加载器使用a ListFragment支持CursorAdapter.到现在为止还挺好.
为了简化操作,我们假设UI上有一个Delete按钮.当用户单击此按钮时,我会从数据库中删除一行,并调用onContentChanged()我的加载程序.此外,在onLoadFinished()回调时,我调用notifyDatasetChanged()我的适配器以刷新UI.
当删除命令快速连续发生时,意味着快速连续onContentChanged()调用,bindView()最终将使用陈旧数据.这意味着行已被删除,但ListView仍在尝试显示该行.这导致了Cursor异常.
我究竟做错了什么?
这是一个自定义的CursorLoader(基于Diane Hackborn女士的建议)
/**
* An implementation of CursorLoader that works directly with SQLite database
* cursors, and does not require a ContentProvider.
*
*/
public class VideoSqliteCursorLoader extends CursorLoader {
/*
* This field is private in the parent class. Hence, redefining it here.
*/
ForceLoadContentObserver mObserver;
public VideoSqliteCursorLoader(Context context) {
super(context); …Run Code Online (Sandbox Code Playgroud) android asynctaskloader android-loadermanager android-cursorloader android-loader
当我开始使用它时,这似乎是微不足道的!我的目标是:
这是我如何做到这一点:
<form action="/system/wpacert" method="post" enctype="multipart/form-data" onsubmit="return closeSelf()" name="certform">
<div>Certificate 1: <input type="file" name="cert1"/></div>
<div>Certificate 2: <input type="file" name="cert2"/></div>
<div>Certificate 3: <input type="file" name="cert3"/></div>
<div><input type="submit" value="Upload"/></div>
</form>
Run Code Online (Sandbox Code Playgroud)
并且Javascript看起来像这样:
<script type="text/javascript">
function closeSelf(){
self.close();
return true;
}
</script>
Run Code Online (Sandbox Code Playgroud)
这似乎在IE8和Chrome上运行良好; 但Firefox拒绝提交表格; 它只是关闭弹出窗口.我可能做错了什么?
忘记发布代码打开弹出窗口.这里是:
<div><input type="submit" value="Upload Certificates" onclick="popupUploadForm()"/>
Run Code Online (Sandbox Code Playgroud)
和相应的javascript:
function popupUploadForm(){
var newWindow = window.open('/cert.html', 'name', 'height=500,width=600');
}
Run Code Online (Sandbox Code Playgroud) 在"深层"对象层次结构中使用Builder模式的最佳实践是什么?为了详细说明,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但这个问题适用于任何情况).我的对象层次结构深度为4级,具有不同程度的复杂性.我的意思是,在某些级别中,我只有几个属性用于我的对象,而在某些其他级别,我有多达10个属性.
所以请考虑这个假设的例子(为简洁起见,我省略了Simple XML注释)
public class Outermost {
private String title;
private int channel;
private List<Middle> middleList;
}
class Middle{
private int id;
private String name;
private boolean senior;
/* ... ... 10 such properties */
private Innermost inner;
}
class Innermost{
private String something;
private int foo;
/* ... Few more of these ..*/
}
Run Code Online (Sandbox Code Playgroud)
如果我想Outermost使用构建器强制创建对象,那么最好的方法是什么?最明显的答案是为inner static Builder上述每个类提供类.
但是,这不会让生成器模式试图解决的问题变得笨拙吗?我正在考虑这样的事情 - 这将强制执行"由内而外"的方法 - 这意味着在将Innermost对象添加到Middle对象之前必须完全构造和实例化对象.但我们都知道在实践中(特别是在构建XML或JSON时),我们很少有"及时"的信息来实现这一点.
有可能,人们最终会在每个级别都拥有每个属性的变量; 并在最后创建对象.或者,最终会让代码中出现多个级别的Builder,从而增加了混乱.
那么,关于如何优雅地实现这一点的任何想法?
如何决定Activity一个Notification应该启动如果目标可能取决于配置(屏幕大小,方向等); 当一个人使用Fragments 时经常出现这种情况?
让我们考虑一下NewsReader示例,演示如何使用Fragments生成一个可以很好地适应多种屏幕尺寸和方向的应用程序.此应用程序的结构如下:
HeadlinesFragment.ArticleFragment.NewsReaderActivity).在双窗格模式下,此活动包含两个片段.在单窗格模式下,它只包含HeadlinesFragment.ArticleActivity.此活动仅用于单窗格模式; 它包含了ArticleFragment.现在,假设我要增强此应用程序以添加Service侦听新闻更新的背景,并在有新消息时通过状态栏通知通知用户.合理的要求列表可能如下所示:
请注意,这些要求会根据当前配置转换为不同的目标活动.特别是,
NewsReaderActivity.NewsReaderActivity.ArticleActivity.实现上述(2)和(3)的优雅方式是什么?我认为可以安全地排除Service探测当前配置的可能性,以决定用什么活动来定位PendingIntent.
我想到的一个解决方案是跳过(2)并且总是做(3) - 即,ArticleActivity如果只有一个新闻更新,则始终启动.ArticleActivity的这个片段看起来很有希望:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
//...
// If we are in two-pane layout mode, this activity is no longer …Run Code Online (Sandbox Code Playgroud) 如何将自定义属性的值从父视图"级联"到其子视图?
使用示例最容易解释:
<com.example.CustomLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:percent="35" >
<com.example.CustomView
android:id="@+id/customView1"
app:percent="how-to-get-app:percent-value-here???"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.example.CustomLayout>
Run Code Online (Sandbox Code Playgroud)
在这里,CustomLayout扩展LinearLayout.我在attrs.xml使用<declare-styleable>元素中定义了一个自定义属性"percent" .如您所见,我在XML中将百分比设置为35 CustomLayout.
我现在想要传递相同的值CustomView(扩展View),我将包括在内CustomLayout.我无法找到在XML中执行此操作的方法(尽管在代码中很容易这样做).
我尝试了以下方法:
app:percent="@attr/percent"
app:percent="?attr/percent"
这两个(果然)失败NumberFormatException的TypedArray#getInt().
那么,关于如何使其发挥作用的任何想法?
我在博客上托管的博客中使用google-code-prettify进行语法突出显示.我的问题是我没有看到我的预格式化代码块周围出现滚动条,即使代码太宽而不适合指定的宽度.我用格式化代码块
<pre class="prettyprint lang-java prettyprinted" style=""> <code>public class MyVeryVeryLongClassname extends MyBaseClassWithAnEvenLongerName implements AnInterface, AnotherInterface, YetAnotherInterface { </code></pre>
Run Code Online (Sandbox Code Playgroud)
在我的博客上,滚动条永远不会出现,并且该行超出了帖子列的右边缘(例如,看一下这篇文章),使它看起来非常难看.StackOverflow显示相同的内容:
public class MyVeryVeryLongClassname extends MyBaseClassWithAnEvenLongerName implements AnInterface, AnotherInterface, YetAnotherInterface {
Run Code Online (Sandbox Code Playgroud)
我使用Firebug来研究stackoverflow是如何做到这一点的,我无法发现与我正在做的事情有什么不同.我链接到与SO使用的相同的JS文件(在他们自己的CDN上).我也使用相同的风格.
那么,我需要做什么才能将滚动条添加到预先格式化的代码块中?