小编mid*_*ite的帖子

@hide在Android源代码中的含义是什么?

对于Activity源代码,第3898行(靠近底部):

/**
 * @hide
 */
public final boolean isResumed() {
    return mResumed;
}
Run Code Online (Sandbox Code Playgroud)

什么@hide意思?

我发现我public class ChildActivity extends Activity { ... }不能用/看Activity.isResumed().这是正常的吗?我该如何访问它?

android android-source android-activity

113
推荐指数
3
解决办法
4万
查看次数

将Fragment动态附加到<FrameLayout>?

好吧,我有一个简单的<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

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

getChildFragmentManager()以编程方式(动态)添加片段?

如何使用(或"我们可以使用")getChildFragmentManager()以编程方式(动态)添加Fragments?

这是我的例子.

我有一个MainActivity,一个OuterFrag和一个InnerFrag.我将动态添加OuterFrag到.而且,我还将动态添加到.但我想完全添加一个孩子,而不是替换,并成为新的孩子.MainActivityFragmentManagerInnerFragOuterFragFragmentManagerInnerFragOuterFragOuterFragMainActivity

我想保持这种等级制度:MainActivity -> OuterFrag -> InnerFrag.所以MainActivity总是可以调用OuterFrag.

但是不要从这个层次结构改变:MainActivity -> OuterFrag到这个层次结构:MainActivity -> InnerFragMainActivity将失去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)

android android-fragments android-nested-fragment

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

最佳方式:在ScrollView中保存并恢复TextView位置

我想要的是,在设备更改方向时,屏幕中的顶线在纵向时仍然是横向屏幕上的顶行.反之亦然.

由于纵向和横向之间的屏幕宽度可能不同,因此文本的线宽(也就是宽度TextView和宽度ScrollView)会有所不同.因此,在不同的屏幕配置(纵向与横向,大与小)中,换行将有所不同.在不同的情况下,换行符将处于不同的位置.

有三种不太完美的解决方案供您参考.还解释了它们的缺点.


首先,最基本的方法:

(1)仅将y偏移存储在像素中

请查看: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(在屏幕顶部).(因为顶部有两行偏移的像素.)


然后我想出一个方法,

(2)通过保存滚动百分比

@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

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

使用继承构建通用树

我正在构建一个泛型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> …

java generics tree inheritance type-parameter

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

官方XSLT验证器?

有没有官方的XSLT验证器,如http://validator.w3.org/的HTML和XHTML?

我知道http://validator.w3.org/也可用于验证XML和XSL文档.但它们被验证为XML结构.

例如,在有效的XHTML中,<span><div>...</div></span>无效,因为块元素不应出现在内联元素中.

那么,是否有一种方便的方法来直接验证XSL文档?

(我想我们可以组合XML和XSL,输出XHTML,然后验证它.但这不是直接而且不方便.)

谢谢!

xml xslt validation xhtml

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

Android Fragment - 从一个视图移动到另一个视图?

我可以先将一个片段添加到视图中,然后"分离"它,然后将其"重新附加"到另一个视图中吗?

在代码中,我想:

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

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

处理屏幕上的片段重复旋转(带示例代码)

有一些类似的答案,但不是这种情况.


我的情况很简单.

我有一个具有两种不同布局的活动,一个在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

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

有限重复排列算法

是否有算法以有限的重复列出所有排列?如果有一个现有的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)

java arrays algorithm math permutation

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

用null参数调用super.onCreate()?

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 android-layout android-view android-activity

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