Android 在gridview中插入图像时获取stackoverflow异常
我有一个视图页面,里面有gridview的片段和gridview中的图像(Emojis)。这就像一个带有表情符号的活动,你可以在不同的表情符号类型之间滑动。 这是我的viewpager活动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
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;
}