ViewPager测试中出现"TransactionTooLargeException"异常

5
我是第一次实现ViewPager,但我遇到了一些问题,因为我得到了以下错误:
06-20 10:40:51.366 11377-11377/com.example.ruelas.elite E/AndroidRuntime: Error reporting crash
                                                                      android.os.TransactionTooLargeException: data parcel size 26485896 bytes
                                                                          at android.os.BinderProxy.transactNative(Native Method)
                                                                          at android.os.BinderProxy.transact(Binder.java:503)
                                                                          at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425)
                                                                          at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90)
                                                                          at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
                                                                          at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

我没有用ViewPager做任何花哨的事情,但是我无法使其工作,这是正在运行它的Activity:

package com.example.ruelas.elite;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class setup extends AppCompatActivity {
ViewPager vpSetup;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setup);
    vpSetup = (ViewPager)findViewById(R.id.vpSetup);
    vpSetup.setAdapter(new adapterSetup(getSupportFragmentManager()));
}
}

适配器设置类:
package com.example.ruelas.elite;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.util.Log;

public class adapterSetup extends FragmentPagerAdapter {
String [] titulos = new String[]{"Modalidad", "Temas"};
public adapterSetup(FragmentManager fm) {
    super(fm);
}
@Override
public Fragment getItem(int position) {
    switch (position){
        case 0:
            Log.d("case0","case0");
            return new fragmentModalidad();
        case 1:
            return new fragmentTemas();
        default:
            return null;
    }
}
@Override
public int getCount() {
    return titulos.length;
}
@Override
public CharSequence getPageTitle(int position) {
    return titulos[position];
}
}

我认为我的Gradle可能与此有关:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.example.ruelas.elite"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.0.0'
}

其中一个片段(它们只是带有大文本的XML文件):

package com.example.ruelas.elite;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Ruelas on 20/06/2016.
 */
public class fragmentModalidad extends Fragment{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragmentmodalidad, container, false);
    }
}

提前感谢您,如有遗漏必要信息,请随时提出。

1个回答

8
抱歉,我的错,另一个类的加载器没有调用正确的构造函数,应该是:
return inflater.inflate(R.layout.fragmentmodalidad, container);

何时使用:

return inflater.inflate(R.layout.fragmentmodalidad, container, false);

当需要此代码时。


你救了我 :) 非常感谢,你能告诉我这两种情况的确切区别吗?是什么导致了这个异常? - TapanHP
1
最后一个参数是指是否要将子项添加到第二个参数中的GroupView(在那个特定时刻),在这种情况下,您不想添加它(也不能添加),您只想返回从资源膨胀而来的GroupView。因此,试图将膨胀的资源添加到“容器”参数将导致我们刚才看到的错误。 - LuisE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接