如何处理Gridview在ViewPager中单击?

时间:2015-06-09 12:56:44

标签: android gridview android-viewpager

我在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;

    }
}

2 个答案:

答案 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()中显示错误。