小编Ixx*_*Ixx的帖子

理解Fragment的setRetainInstance(boolean)

从文档开始:

public void setRetainInstance(boolean retain)

控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:

  • onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
  • 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
  • onAttach(Activity)和onActivityCreated(Bundle)仍将被调用.

我有一些问题:

  • 片段是否也保留其视图,还是会在配置更改时重新创建?"保留"究竟是什么意思?

  • 当用户离开活动时,片段是否会被销毁?

  • 为什么它不适用于后端堆栈上的碎片?

  • 哪个是使用此方法有意义的用例?

android android-fragments

328
推荐指数
4
解决办法
16万
查看次数

动态更新ViewPager?

我无法更新ViewPager中的内容.

一个问题:FragmentPagerAdapter类中的方法instantiateItem()和getItem()的关系和正确用法是什么?

我只使用getItem()实例化并返回我的片段:

@Override
public Fragment getItem(int position) {
    return new MyFragment(context, paramters);
}
Run Code Online (Sandbox Code Playgroud)

这很好用(但据说我不能改变内容).

所以我发现了这个:ViewPager PagerAdapter没有更新View

特别是在其中讨论了方法instantiateItem():

"我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法"

所以现在我想实现instantiateItem()才能做到这一点.但我不知道我必须返回那里(return是Object)和getItem(int position)的关系是什么?

目前我正在使用getItem来实例化Fragment,这是错的吗?但是,我是否必须将片段放在实例变量中,或者根本不实现getItem()......?我只是不明白.

我试过阅读参考资料:

  • public abstract Fragment getItem(int position)

    返回与指定位置关联的片段.

  • public Object instantiateItem(ViewGroup容器,int位置)

    创建给定位置的页面.适配器负责将视图添加到此处给出的容器,但它必须确保在从finishUpdate(ViewGroup)返回时完成此操作.参数

    容器包含将在其中显示页面的View.position要实例化的页面位置.

    返回

    返回表示新页面的Object.这不需要是View,但可以是页面的其他容器.

......但我仍然不明白它们是如何相关的以及我必须做些什么.

这是我的代码.我正在使用支持包v4.

ViewPagerTest

public class ViewPagerTest extends FragmentActivity {
    private ViewPager pager;
    private MyFragmentAdapter adapter; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pager1);

        pager = (ViewPager)findViewById(R.id.slider);

        String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};

        adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

303
推荐指数
7
解决办法
26万
查看次数

如何处理TransactionTooLargeException

我得到了一个应用程序TransactionTooLargeException的错误跟踪.不可重复,从未有过.在文档中说

Binder事务失败,因为它太大了.

在远程过程调用期间,调用的参数和返回值将作为存储在Binder事务缓冲区中的Parcel对象传输.如果参数或返回值太大而不适合事务缓冲区,则调用将失败并抛出TransactionTooLargeException.

...

当远程过程调用抛出TransactionTooLargeException时,有两种可能的结果.客户端无法将其请求发送到服务(很可能,如果参数太大而无法放入事务缓冲区中),或者服务无法将其响应发送回客户端(最有可能的话,如果返回值为太大而不适合事务缓冲区).

...

所以,好吧,我正在传递或接收超出某个未知限制的参数.但是哪里?

堆栈跟踪不会显示我的文件中的任何内容:

java.lang.RuntimeException: Adding window failed
at android.view.ViewRootImpl.setView(ViewRootImpl.java:548)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:406)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:320)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:152)
at android.view.Window$LocalWindowManager.addView(Window.java:557)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2897)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$600(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:4977)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.view.IWindowSession$Stub$Proxy.add(IWindowSession.java:569)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:538)
... 16 more
android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.view.IWindowSession$Stub$Proxy.add(IWindowSession.java:569)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:538)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:406)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:320)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:152)
at android.view.Window$LocalWindowManager.addView(Window.java:557)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2897)
at …
Run Code Online (Sandbox Code Playgroud)

android exception

225
推荐指数
12
解决办法
15万
查看次数

如何为Android中的TextView启用标准复制粘贴?

我想为TextView启用标准复制粘贴(与EditText相同).我该怎么做?

我尝试使用不可编辑的EditText但它运行不正常(有时它变得可编辑或者没有显示复制粘贴叠加).而且一般来说这可能不是一个好方法.

需要从API 7开始的工作解决方案.

android copy-paste textview

106
推荐指数
6
解决办法
8万
查看次数

SBT在本地maven存储库中找不到文件,尽管它存在

我遇到了maven依赖的问题,这个问题在我的本地资源库中.

SBT找不到它.已经将日志级别设置为调试,但没有获得任何新内容.

这些文件位于存储库中.我将粘贴路径从控制台复制到文件资源管理器,它们就在那里.

输出:

[debug]          trying file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.pom

[debug]                 tried file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.pom

[debug]         Local Maven Repository: resource not reachable for com/twitter#naggati;2.0.0: res=file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0
.0/naggati-2.0.0.pom

[debug]          trying file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.jar

[debug]                 tried file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.jar

[debug]         Local Maven Repository: resource not reachable for com/twitter#naggati;2.0.0: res=file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0
.0/naggati-2.0.0.jar

[debug]         Local Maven Repository: no ivy file nor artifact found for com.twitter#naggati;2.0.0
Run Code Online (Sandbox Code Playgroud)

编辑:我在项目/构建中使用scala文件添加了路径,http://code.google.com/p/simple-build-tool/wiki/LibraryManagement中所述

"如果你将它添加为存储库,sbt可以搜索你当地的Maven存储库:"

val mavenLocal = "Local Maven Repository" at "file://"+Path.userHome+"/.m2/repository"
Run Code Online (Sandbox Code Playgroud)

这使得sbt看起来在本地存储库中.之前没有.

所以scala文件看起来像这样:

import sbt._

class Foo(info: ProjectInfo) extends DefaultProject(info) {

val mavenLocal = "Local Maven Repository" at "file://c:/Users/userz/.m2/repository" …
Run Code Online (Sandbox Code Playgroud)

scala maven sbt

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

以编程方式滑动时更改ViewPager动画持续时间

我正在改变幻灯片

viewPager.setCurrentItem(index++, true);
Run Code Online (Sandbox Code Playgroud)

但它变快了.有没有办法手动设置动画速度?

搜索过,发现有人问到同样的地方(除了StackOverflow,也许我有运气:)),没有答案.

喜欢:

https://groups.google.com/group/android-developers/browse_thread/thread/a13405c0b5833893?fwc=1

提前致谢.

animation android android-viewpager

69
推荐指数
4
解决办法
6万
查看次数

java.lang.IllegalStateException:键f1:index 3不再存在片段

我想了解此异常以实现正确的修复.

概述:

有一个ViewPager,它使用FragmentStatePagerAdapter通过getItem和实例化2个片段MyFragmentClass.newInstance(...).

Adapter的getItem看起来像这样:

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;

    switch(position) {
        case 0:
            fragment = MyFragment2.newInstance(par1);
            break;
        case 1:
            fragment = MyFragment2.newInstance(par2, par3);
            break;
    }
    return fragment;
}
Run Code Online (Sandbox Code Playgroud)

问题:

当活动被销毁并再次创建时,适配器再次被实例化,片段再次创建MyFragmentClass.newInstance(...)...但在此行上:

pager.setAdapter(adapter);

我得到了提到的例外.

我查看了抛出异常的源代码,它是这样的:

@Override
public Fragment getFragment(Bundle bundle, String key) {
    int index = bundle.getInt(key, -1);
    if (index == -1) {
        return null;
    }
    if (index >= mActive.size()) {
        throw new IllegalStateException("Fragement no longer exists for key "
                + key + …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

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

检查HTML代码段是否对Javascript有效

我需要一个可靠的Javascript库/函数来检查HTML代码段是否有效,我可以从我的代码中调用它.例如,它应检查打开的标签和引号是否已关闭,嵌套是否正确等.

我不希望验证失败,因为某些东西不是100%标准(但无论如何都会起作用).

html javascript validation

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

FragmentStatePagerAdapter IllegalStateException:<MyFragment>当前不在FragmentManager中

我在一些使用FragmentStatePagerAdapter的活动的onResume()中获得了这个.使用设备的后退按钮时.不总是.不可重复.

我正在使用支持包v4,最新修订版(8).

已经用谷歌搜索过,没有成功找到有用的答案.

在源代码中,它被抛出:FragmentManager.java

@Override
public void putFragment(Bundle bundle, String key, Fragment fragment) {
    if (fragment.mIndex < 0) {
        throw new IllegalStateException("Fragment " + fragment
                + " is not currently in the FragmentManager");
    }
    bundle.putInt(key, fragment.mIndex);
}
Run Code Online (Sandbox Code Playgroud)

但是为什么片段的索引<0呢?

实例化片段的代码:

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;

    switch(position) {
        case 0:
            fragment = MyFragment.newInstance(param1);
            break;
        case 1:
            fragment = MyFragment2.newInstance(param2, param3);
            break;
    }
    return fragment;
}

@Override
public int getCount() {
    return 2;
}
Run Code Online (Sandbox Code Playgroud)

我也无法通过源调试,因为支持包不允许我附加源,出于某种原因......但这是一个不同的问题......

android fragment

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

奇怪的泛型错误

我正在尝试使用泛型实现以下结构.得到一个奇怪的编译器错误,无法弄清楚原因.

class Translator<T:Hashable> {...}

class FooTranslator<String>:Translator<String> {...}
Run Code Online (Sandbox Code Playgroud)

这个想法是Translator使用T作为字典中键的类型.这可以是例如String或枚举.子类提供具体的字典.

但它失败的原因是:"类型'字符串'不符合协议'Hashable'"

但String符合Hashable!我疯了吗?它也不适用于Int,它也符合Hashable.如果我将Hashable替换为Equatable也不起作用,这也应该由两者实现.

If I remove the type constraint, just for testing (where I also have to disable the dictionary, as I can't use anything not hashable as key there) - it compiles

class Translator<T> {...}

class FooTranslator<String>:Translator<String> {...}
Run Code Online (Sandbox Code Playgroud)

What am I doing wrong?

generics swift

28
推荐指数
2
解决办法
2099
查看次数