Как обрабатывать Gridview Нажмите в ViewPager?

Я создаю gridview в своем классе FragmentA, и когда я щелкаю позицию gridview, скажите 0, затем он перемещается к классу FragmentB и снова, когда я щелкаю позицию 1, затем он перемещается к классу FragmentC.

Но моя проблема в том, что когда мы возвращаемся в мой класс FragmentA, мое меню Gridview автоматически удваивается, почему?

Здесь ниже мой полный код:

ФрагментА класс

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 ответа

Решение

мое меню Gridview автоматически удваивается, почему?

Это потому, что вы добавляете элементы в onCreateView() вашего фрагмента и, вероятно, это onCreateView() позвонил снова, когда вы вернетесь к FragmentA, поэтому, прежде чем вставлять элементы в 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().

Другие вопросы по тегам