如何处理ViewPager中的Gridview Click?

how to handle Gridview Click in ViewPager?

我在我的 FragmentA class 中创建了 gridview,当我点击 gridview 位置说 0 然后它导航到 FragmentB class 当我再次点击位置 1 然后它导航到 FragmentC class.

但我的问题是,当我们回到我的 FragmentA class 时,我的 Gridview 菜单自动加倍,为什么?

下面是我的完整代码:

片段A class

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 适配器 class

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;

    }
}

my Gridview menu is automatically double why?

这是因为您要在片段的 onCreateView() 中添加项目,当您回到 FragmentA 时,可能会再次调用此 onCreateView()。所以在将项目插入 gridArray 之前清除数组中的元素。

gridArray.clear();
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
//you code.....

holder.txtTitle.setText(item.getTitle()); holder.imageItem.setImageBitmap(item.getImage());

在 getTitle() 和 getImage() 中显示错误。