Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在gridview中插入图像时获取stackoverflow异常_Android_Gridview_Android Viewpager_Viewpagerindicator - Fatal编程技术网

Android 在gridview中插入图像时获取stackoverflow异常

Android 在gridview中插入图像时获取stackoverflow异常,android,gridview,android-viewpager,viewpagerindicator,Android,Gridview,Android Viewpager,Viewpagerindicator,我有一个视图页面,里面有gridview的片段和gridview中的图像(Emojis)。这就像一个带有表情符号的活动,你可以在不同的表情符号类型之间滑动。 这是我的viewpager活动 SlidingTabLayout slidingTabLayout; ViewPager viewPager; Fragment[] fragments = {SmileysFragment.newInstance(0)}; @Override protected void onCreate(Bundle

我有一个视图页面,里面有gridview的片段和gridview中的图像(Emojis)。这就像一个带有表情符号的活动,你可以在不同的表情符号类型之间滑动。 这是我的viewpager活动

SlidingTabLayout slidingTabLayout;
ViewPager viewPager;
Fragment[] fragments = {SmileysFragment.newInstance(0)};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.emoji_layout);
    slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tab_layout);
    viewPager = (ViewPager) findViewById(R.id.view_pager);

    initViews();
}

private void initViews() {
    FragmentPagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            return fragments[position];
        }

        @Override
        public int getCount() {
            return fragments.length;
        }
    };
    viewPager.setAdapter(adapter);
    List<DataHolder> dataHolders = new ArrayList<>();
    for (int i = 0; i < fragments.length; ++i) {
        dataHolders.add(new DataHolder(getResources().getDrawable(R.drawable.unselected),
                getResources().getDrawable(R.drawable.selected), "我", getResources().getColor(R.color.md_material_blue_600)));
    }
    slidingTabLayout.setUpViewPager(viewPager, dataHolders);
}
这是我的适配器类

public class SmileysAdapter extends BaseAdapter{

private Context mContext;
private int[] image_ids;
public SmileysAdapter(Context c,  int[] resources) {
    mContext = c;
    image_ids = resources;
}

@Override
public int getCount() {
    return image_ids.length;
}



@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return image_ids[position];
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View grid = convertView;
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    if (convertView == null) {

        grid = inflater.inflate(R.layout.smiley_item_layout, null);


    }
    ImageView imageView = (ImageView) grid.findViewById(R.id.smiley_item);

    imageView.setImageResource(image_ids[position]);
    return grid;
}
这是我得到的例外

02:07:11 E AndroidRuntime : FATAL EXCEPTION: main

02:07:11 E AndroidRuntime : java.lang.StackOverflowError

02:07:11 E AndroidRuntime : at      android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5355)

 02:07:11 E AndroidRuntime : at   android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

 02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

02:07:11 E AndroidRuntime : at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)
02:07:11 E AndroidRuntime:at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5359)

请告诉我我做错了什么

你的
onCreateView()
搞砸了

应该是这样的:

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.smiley_emoji_layout, container, false);
        grid = (GridView) view.findViewById(R.id.smileyGridview);
        SmileysAdapter adapter = new SmileysAdapter(getActivity(), image_ids);
        grid.setAdapter(adapter);
        return view;
    }
我想您对适配器的
getView()
感到困惑了。当一个片段创建它的视图时,不涉及循环。容器永远不会为空。您应该始终返回已充气的视图,并且永远不要返回容器本身。

您的
onCreateView()

应该是这样的:

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.smiley_emoji_layout, container, false);
        grid = (GridView) view.findViewById(R.id.smileyGridview);
        SmileysAdapter adapter = new SmileysAdapter(getActivity(), image_ids);
        grid.setAdapter(adapter);
        return view;
    }

我想您对适配器的
getView()
感到困惑了。当一个片段创建它的视图时,不涉及循环。容器永远不会为空。您应该始终返回已充气的视图,而不要返回容器本身。

还应提供来自的异常堆栈跟踪logcat@AndroidMechanic完成:)还提供来自的异常堆栈跟踪logcat@AndroidMechanic完成:)
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.smiley_emoji_layout, container, false);
        grid = (GridView) view.findViewById(R.id.smileyGridview);
        SmileysAdapter adapter = new SmileysAdapter(getActivity(), image_ids);
        grid.setAdapter(adapter);
        return view;
    }