相关疑难解决方法(0)

Bundle对象的变异

我正在使用遗留代码,我在此函数中发现了一个不一致的行为:

@Override
public void openFragment(final Class<? extends BaseFragment> fragmentClass,
                         final boolean addToBackStack,
                         final Bundle args)
{
    long delay = 0;
    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        delay = getResources().getInteger(android.R.integer.config_shortAnimTime) * 2;
    }
    // FIXME: quick fix, but not all cases
    final Bundle args666 = args != null ? (Bundle) args.clone() : null;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            doOpenFragment(fragmentClass, addToBackStack, args666);
        }
    }, delay);
    closeDrawer();
}


protected void doOpenFragment(final Class<? extends BaseFragment> fragmentClass,
                              final boolean addToBackStack,
                              final Bundle args)
{ …
Run Code Online (Sandbox Code Playgroud)

android asynchronous android-handler android-bundle

8
推荐指数
1
解决办法
200
查看次数

使用Parcel克隆对象?

我有一个实现了Parcelable的类.我可以执行以下操作来创建类的新实例吗?:

Foo foo = new Foo("a", "b", "c");

Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
Run Code Online (Sandbox Code Playgroud)

我希望foo2成为foo的克隆.

----------------------更新--------------------------- ----

以上不起作用(在新实例中所有Foo成员都为null).我在活动之间传递Foos就好了,所以Parcelable接口实现正常.使用以下工作:

Foo foo1 = new Foo("a", "b", "c");
Parcel p1 = Parcel.obtain();
Parcel p2 = Parcel.obtain();
byte[] bytes = null;

p1.writeValue(foo1);
bytes = p1.marshall();

p2.unmarshall(bytes, 0, bytes.length);
p2.setDataPosition(0);
Foo foo2 = (Foo)p2.readValue(Foo.class.getClassLoader());

p1.recycle();
p2.recycle();

// foo2 is the same as foo1.
Run Code Online (Sandbox Code Playgroud)

从以下q中找到了这个:如何在Android中使用Parcel?

这工作正常,我可以使用它,但它是额外的代码,不确定是否有更短的方法来做到这一点(除了正确实现一个复制构造函数...).

谢谢

android

5
推荐指数
3
解决办法
4771
查看次数