对于Activity源代码,第3898行(靠近底部):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
Run Code Online (Sandbox Code Playgroud)
什么@hide意思?
我发现我public class ChildActivity extends Activity { ... }不能用/看Activity.isResumed().这是正常的吗?我该如何访问它?
好吧,我有一个简单的<FrameLayout>:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FragmentContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
然后在我的代码中,我添加了一个片段:
FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
.replace(R.id.FragmentContainer, aFrag).commit();
Run Code Online (Sandbox Code Playgroud)
在我的代码中的其他地方,我想FragClass (extends Fragment)从ID中获取该对象R.id.FragmentContainer.
我试过了
((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)
Run Code Online (Sandbox Code Playgroud)
要么
((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)
Run Code Online (Sandbox Code Playgroud)
但他们正在返回View,而不是Fragment依附于它.
我知道我可以将变量保留在aFrag某处,所以我不需要再找到它.但我相信应该有办法来解决它.
android android-layout android-fragments android-framelayout
如何使用(或"我们可以使用")getChildFragmentManager()以编程方式(动态)添加Fragments?
这是我的例子.
我有一个MainActivity,一个OuterFrag和一个InnerFrag.我将动态添加OuterFrag到.而且,我还将动态添加到.但我想完全添加一个孩子,而不是替换,并成为新的孩子.MainActivityFragmentManagerInnerFragOuterFragFragmentManagerInnerFragOuterFragOuterFragMainActivity
我想保持这种等级制度:MainActivity -> OuterFrag -> InnerFrag.所以MainActivity总是可以调用OuterFrag.
但是不要从这个层次结构改变:MainActivity -> OuterFrag到这个层次结构:MainActivity -> InnerFrag这MainActivity将失去OuterFrag.
这是我的示例代码.
MainActivity.java
package com.example.frag;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, new OuterFrag()).commit();
getSupportFragmentManager().executePendingTransactions();
System.out.println("Before: "
+ getSupportFragmentManager().findFragmentById(R.id.frameLayout));
((OuterFrag) getSupportFragmentManager().findFragmentById(R.id.frameLayout))
.addInnerFrag();
System.out.println("After: "
+ …Run Code Online (Sandbox Code Playgroud) 我想要的是,在设备更改方向时,屏幕中的顶线在纵向时仍然是横向屏幕上的顶行.反之亦然.
由于纵向和横向之间的屏幕宽度可能不同,因此文本的线宽(也就是宽度TextView和宽度ScrollView)会有所不同.因此,在不同的屏幕配置(纵向与横向,大与小)中,换行将有所不同.在不同的情况下,换行符将处于不同的位置.
有三种不太完美的解决方案供您参考.还解释了它们的缺点.
首先,最基本的方法:
请查看:http://eliasbland.wordpress.com/2011/07/28/how-to-save-the-position-of-a-scrollview-when-the-orientation-changes-in-android/
为什么这不是那么完美:
在肖像中,线条被包裹.
Line_1_Word_A Line_1_Word_B Line_1_Word_C
Line_1_Word_D
Line_2_Word_A Line_2_Word_B Line_2_Word_C
Line_2_Word_D
Line_3_Word_A Line_3_Word_B Line_3_Word_C
Line_3_Word_D
Run Code Online (Sandbox Code Playgroud)
在横向中,线条不会被包裹.
Line_1_Word_A Line_1_Word_B Line_1_Word_C Line_1_Word_D
Line_2_Word_A Line_2_Word_B Line_2_Word_C Line_2_Word_D
Line_3_Word_A Line_3_Word_B Line_3_Word_C Line_3_Word_D
Run Code Online (Sandbox Code Playgroud)
想象一下Line_2_Word_A在保存时在Portrait中读取(在屏幕顶部).当更改为横向时,它将显示Line_3_Word_A(在屏幕顶部).(因为顶部有两行偏移的像素.)
然后我想出一个方法,
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
final ScrollView scrollView = (ScrollView) findViewById(R.id.Trial_C_ScrollViewContainer);
outState.putFloatArray(ScrollViewContainerScrollPercentage,
new float[]{
(float) scrollView.getScrollX()/scrollView.getChildAt(0).getWidth(),
(float) scrollView.getScrollY()/scrollView.getChildAt(0).getHeight() });
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) android textview android-layout android-scrollview android-orientation
我正在构建一个泛型Tree<T>类,它支持子树的继承.但我遇到了一些问题.请你帮帮我吗?
让我们定义Tree类和BlueTree类,在哪里BlueTree extends Tree.
让我们定义Leaf类和RedLeaf类,在哪里RedLeaf extends Leaf.它们被用作树所包含的"数据".
A Tree<Leaf>表示类型的树Tree,其"数据"是类型Leaf.
对于继承(这不是适当的Java继承):
Tree<Leaf>可以有孩子的类型
Tree<Leaf>,Tree<RedLeaf>,BlueTree<Leaf>,和BlueTree<RedLeaf>..
Tree<RedLeaf>可以有孩子的类型
Tree<RedLeaf>,和BlueTree<RedLeaf>,Tree<Leaf>,或BlueTree<Leaf>..
BlueTree<Leaf>可以有孩子的类型
BlueTree<Leaf>,和BlueTree<RedLeaf>,Tree<Leaf>,或Tree<RedLeaf>..
BlueTree<RedLeaf>可以有孩子的类型
BlueTree<RedLeaf>,Tree<Leaf>,Tree<RedLeaf> …有没有官方的XSLT验证器,如http://validator.w3.org/的HTML和XHTML?
我知道http://validator.w3.org/也可用于验证XML和XSL文档.但它们被验证为XML结构.
例如,在有效的XHTML中,<span><div>...</div></span>无效,因为块元素不应出现在内联元素中.
那么,是否有一种方便的方法来直接验证XSL文档?
(我想我们可以组合XML和XSL,输出XHTML,然后验证它.但这不是直接而且不方便.)
谢谢!
我可以先将一个片段添加到视图中,然后"分离"它,然后将其"重新附加"到另一个视图中吗?
在代码中,我想:
fragOne one = new fragOne();
getSupportFragmentManager().beginTransaction()
.add(R.id.left, one, "tag").commit();
getSupportFragmentManager().beginTransaction()
.detach(one).commit(); // or .remove(), or .addToBackStack(null).remove()
getSupportFragmentManager().executePendingTransactions();
getSupportFragmentManager().beginTransaction()
.add(R.id.right, one).commit();
Run Code Online (Sandbox Code Playgroud)
但它会引发错误:
04-05 13:28:03.492: E/AndroidRuntime(7195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trybackstack/com.example.trybackstack.MainActivity}: java.lang.IllegalStateException: Can't change container ID of fragment fragOne{40523130 #0 id=0x7f080000 tag}: was 2131230720 now 2131230721
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
android android-layout android-fragments android-fragmentactivity fragmenttransaction
有一些类似的答案,但不是这种情况.
我的情况很简单.
我有一个具有两种不同布局的活动,一个在Portrait中,另一个在Landscape中.
在Portrait中,我动态地使用<FrameLayout>并添加Fragment到它中.
在Landscape中,我使用<fragment>的Fragment是静态的.(事实上这没关系)
它首先在Portrait中开始,然后我Fragment简单地添加了:
ListFrag listFrag = new ListFrag();
getSupportFragmentManager().beginTransaction()
.replace(R.id.FragmentContainer, listFrag).commit();
Run Code Online (Sandbox Code Playgroud)
哪里ListFrag extends ListFragment.
然后我做一个屏幕旋转.我发现listFrag正在横向模式下重新创建.
(其中我注意到onCreate()使用非null Bundle再次调用该方法)
我尝试使用setRetainInstance(false)像@NPike 这样的帖子.但这getRetainInstance()已经false是默认情况.它没有像我所说的那样按照文档说的那样做.有人可以解释一下吗?
我正在处理的片段是ListFragment,它确实setListAdapter()在onCreate().所以这个if (container == null) return null;方法不能在这里使用.(或者我不知道如何申请).
我从这篇文章中得到了一些提示.我应该用if (bundle != null) setListAdapter(null); …
android android-fragments android-listfragment android-fragmentactivity android-framelayout
是否有算法以有限的重复列出所有排列?如果有一个现有的Java库,那就太好了!
假设我们有3个项目{A, B, C}.我们想要2个项目的排列.这将是3 P 2:
{A, B}
{A, C}
{B, A}
{B, C}
{C, A}
{C, B}
Run Code Online (Sandbox Code Playgroud)
但是如果我们允许最多重复两次.怎么会这样?(我真的不知道.)
我尝试成像,我们从集合中得到2的排列{A, A, B, B, C, C}.它将是6 P 2 = 30.但是我们必须拿走那些重复的东西.我已经手动完成它,它是9.我不知道如何从数学计算9.
{A, A}
{A, B}
{A, C}
{B, B}
{B, A}
{B, C}
{C, C}
{C, A}
{C, B}
Run Code Online (Sandbox Code Playgroud)
(事实上,重复2的3 P 2不是一个很好的例子.这是因为排列中只有2个元素.因此,无限重复之间没有差异.重复2的4 P 3将是一个更好的例子.但是很难列出所有的排列.)
一个更好的例子示例:4 P 3的集合{A, B, C, D}:
{A, B, C}
{A, B, D}
{A, …Run Code Online (Sandbox Code Playgroud) 在onCreate(Bundle bdl){},我们必须调用它的超级构造函数super.onCreate(bdl).
对于新创建的活动,我们得到了一个null Bundle onCreate(Bundle bdl){}.因此,当我们打电话时super.onCreate(bdl),它与呼叫相同super.onCreate(null).
对于重建的活动(如旋转后),我们得到了一个非null的Bundle.但我注意到即使我们打电话super.onCreate(null),而不是super.onCreate(bdl),它似乎是相同的.布局恢复工作完成super.onRestoreInstanceState(bdl).
那么,呼叫super.onCreate(null)是否真的与呼叫super.onCreate(bdl)所有情况一样?
谢谢.
android ×7
java ×2
algorithm ×1
android-view ×1
arrays ×1
generics ×1
inheritance ×1
math ×1
permutation ×1
textview ×1
tree ×1
validation ×1
xhtml ×1
xml ×1
xslt ×1