我在FragmentA类中创建了gridview,当我点击gridview位置说0然后导航到FragmentB类时再次点击位置1然后导航到FragmentC类。
但我的问题是,当我们回到FragmentA类时,我的Gridview菜单会自动加倍,为什么?
以下是我的完整代码:
FragmentA类
public class FragmentA extends Fragment {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
public FragmentA() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_a, container, false);
Bitmap homeIcon = BitmapFactory.decodeResource(this.getResources(),
R.drawable.home);
Bitmap userIcon = BitmapFactory.decodeResource(this.getResources(),
R.drawable.personal);
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
gridArray.add(new Item(homeIcon, "House"));
gridArray.add(new Item(userIcon, "Friend"));
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "Personal"));
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
gridArray.add(new Item(homeIcon, "Building"));
gridView = (GridView) view.findViewById(R.id.gridView1);
customGridAdapter = new CustomGridViewAdapter(getActivity(),
R.layout.row_grid, gridArray);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
switch (position) {
case 0:
((MainActivity) getActivity()).switchToFragementB(2);
break;
case 1:
((MainActivity) getActivity()).switchToFragmentC(3);
break;
}
}
});
return view;
}
}
这是CustomGridViewAdapter适配器类
public class CustomGridViewAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public CustomGridViewAdapter(Context context, int layoutResourceId,
ArrayList<Item> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
RecordHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
Item item = data.get(position);
holder.txtTitle.setText(item.getTitle());
holder.imageItem.setImageBitmap(item.getImage());
return row;
}
static class RecordHolder {
TextView txtTitle;
ImageView imageItem;
}
}
答案 0 :(得分:0)
我的Gridview菜单会自动加倍?
这是因为您要在片段的onCreateView()
中添加项目,当您返回onCreateView()
时,可能会再次调用此FragmentA
。所以在将项目插入gridArray
之前清除数组中的元素。
gridArray.clear();
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
//you code.....
答案 1 :(得分:0)
holder.txtTitle.setText(item.getTitle()); holder.imageItem.setImageBitmap(item.getImage());
在getTitle()和getImage()中显示错误。