0
我有GridView的問題。我用它作爲我的應用程序的菜單。我創建了一個自定義適配器,將菜單項顯示爲下面帶有標籤的圖片。問題是,沒有任何理由,第一張圖片和標籤被分配到第10個項目,你可以在圖片中看到(的picures只是佔位,直到我畫我自己):GridView複製隨機項目
我不知道是什麼導致了這種情況,特別是當我點擊菜單中的一些可用項目,然後按下後退按鈕返回到菜單時,問題奇蹟般地消失。
這裏是我的代碼:
public class MainMenuFragment extends Fragment implements OnItemClickListener{
GridView grid;
FragmentManager manager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.main_menu_fragment, container, false);
manager = getActivity().getFragmentManager();
grid = (GridView) root.findViewById(R.id.gridView1);
grid.setAdapter(new MenuTileAdapter(getActivity()));
grid.setOnItemClickListener(this);
return root;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentTransaction trans = manager.beginTransaction();
switch (position){
case 0:
trans.replace(R.id.frag_container, new BasicSettingsFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 1:
trans.replace(R.id.frag_container, new StretchingFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 2:
trans.replace(R.id.frag_container, new SqueezingFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 3:
trans.replace(R.id.frag_container, new BendingFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 4:
trans.replace(R.id.frag_container, new CrackBrickingFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 5:
trans.replace(R.id.frag_container, new TraverseDeformationFragment());
trans.addToBackStack(null);
trans.commit();
break;
case 6:
trans.replace(R.id.frag_container, new CuttingFragment());
trans.addToBackStack(null);
trans.commit();
break;
default:
break;
}
}
}
這裏是MenuTileAdapter
的getView方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null){
gridView = new View(context);
gridView = inflater.inflate(R.layout.menu_tile, null);
TextView label = (TextView) gridView.findViewById(R.id.textView1);
ImageView icon = (ImageView) gridView.findViewById(R.id.imageView1);
label.setText(this.labels[position]);
switch (position){
case 0:
icon.setImageResource(R.drawable.a1);
break;
case 1:
icon.setImageResource(R.drawable.a2);
break;
case 2:
icon.setImageResource(R.drawable.a3);
break;
case 3:
icon.setImageResource(R.drawable.a4);
break;
case 4:
icon.setImageResource(R.drawable.a5);
break;
case 5:
icon.setImageResource(R.drawable.a6);
break;
case 6:
icon.setImageResource(R.drawable.a7);
break;
case 7:
icon.setImageResource(R.drawable.a8);
break;
case 8:
icon.setImageResource(R.drawable.a9);
break;
case 9:
icon.setImageResource(R.drawable.a10);
break;
case 10:
icon.setImageResource(R.drawable.a11);
break;
case 11:
icon.setImageResource(R.drawable.a12);
break;
}
} else {
gridView = convertView;
}
return gridView;
}
我已經通過這個代碼走了hundread次,我什麼也看不到會導致此奇怪的問題。
哦回收的觀點,這就是正確的。我刪除了if語句,即使'convertView'不爲null,它現在也會重新創建View。或者也許有更好的解決方案?無論如何,謝謝你的幫助! – jammaster 2014-11-05 18:21:34
是的,不要那樣做,只檢查contentView是否爲空。如果這只是誇大了觀點。之後做所有事情 – tyczj 2014-11-05 18:23:30