Контекстное меню не работает должным образом с элементами GridView

У меня есть фрагмент, который содержит gridView, внутри которого я инициализирую его элементы с помощью ImageViews, установленным моим классом ImageAdapter.java. У меня также есть другой фрагмент, который также содержит gridView, который я инициализирую с imageViews другим моим классом адаптера -> UserBoxGlbImageAdapter.java.

Теперь я пытаюсь достичь этого, когда пользователь долго нажимает на imageView из сетки первого фрагмента, я создаю контекстное меню с двумя опциями. Когда выбран первый, я хочу получить позицию этого вида и использовать ее для добавления того же изображения в imageView моего другого фрагмента сетки.

Пример: когда вы долго нажимаете на 0-й элемент [index] в первой сетке, получите этот индекс и используйте его, чтобы добавить этот же значок / изображение в сетку другого фрагмента.

Большая часть этого работает, но когда я пытаюсь добавить выбранный элемент, мое приложение добавляет всю строку (или, может быть, всю сетку?) К этому другому фрагменту. Есть идеи по этому вопросу? Вот мои занятия:

Fragment1.class: [Содержит контекстное меню]

public class MainScreenFragment extends Fragment {

// Main Grid View
GridView gridView;

public MainScreenFragment() {
    // Required empty public constructor
}

// Create a Context Menu when an item in the GridView is long-pressed
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Card Options");
    AdapterView.AdapterContextMenuInfo cmi = (AdapterView.AdapterContextMenuInfo) menuInfo;
    menu.add(1,v.getId(),0, "Add Card to GLB");
    menu.add(2,v.getId(),0,"Add Card to JP");
}

// When an item in the context menu gets selected, call a method
@Override
public boolean onContextItemSelected(MenuItem item) {

    // Get some extra info about the contextMenu
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    GridView grid = getView().findViewById(R.id.gridViewLayout);
    int position = info.position; // clicked view's position
    Toast.makeText(getActivity(), "View: " + info.targetView, Toast.LENGTH_SHORT).show();

    if(item.getTitle().equals("Add Card to GLB")) {
        addCardToast(position, "added to GLB");
        addSelectedCardToGlobalUserBox(position);
    } else if (item.getTitle().equals("Add Card to JP")) {
        addCardToast(position , "added to JP");
    } else
    {
        return false;
    }
    return false;
}

private void addSelectedCardToGlobalUserBox(int position) {
    ImageAdapter imageAdapter = new ImageAdapter(getContext());
    UserBoxGlbImageAdapter userBoxGlbImageAdapter = new UserBoxGlbImageAdapter(getContext());
    userBoxGlbImageAdapter.getGLBIconsList().add(imageAdapter.getmThumbIds(position));
    int glbiconSize = userBoxGlbImageAdapter.getCount();
    Toast.makeText(getActivity(), "GlbIcons size: " + glbiconSize, Toast.LENGTH_SHORT).show();
}

private void addCardToast(int id, String text) {
    Toast.makeText(getActivity(), "Info: " + id + text, Toast.LENGTH_SHORT).show();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_main_screen, container, false);

    gridView = view.findViewById(R.id.gridViewLayout);
    gridView.setAdapter(new ImageAdapter(getContext())); // used to set the contents of the GridView-in this case images-
    registerForContextMenu(gridView);

    // When an item from the GridView gets clicked
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // Create a new Intent...
            Toast.makeText(getActivity(), "Position: " + position, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(getContext(),CardViewActivity.class);
            intent.putExtra("Card Index",position);
            intent.putExtra("SCREEN_WIDTH",1080);
            startActivity(intent);
        }
    });
    return view;
}

}

Fragment1ImageAdapter.java:

public class ImageAdapter extends BaseAdapter {
Context mContext;

public ImageAdapter(Context c) {
    mContext = c;
}

@Override
public int getCount() {
    return mThumbIds.length;
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    // If it's not recycled, initialize some attributes
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(225, 225));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

public Integer getmThumbIds(int index) {
    return mThumbIds[index];
}

// References to our images
private Integer[] mThumbIds = {
        R.mipmap.turvegitossj_phy,
        R.mipmap.goget_ur_int,
        R.mipmap.turgogetassj4_teq,
        R.mipmap.turgotenksssj_uragl
};




}

Fragment2.java: [содержит сетку, в которую нужно добавить кликаемые изображения]

public class UserBoxGLBFragment extends Fragment {

GridView globalGridView;

public UserBoxGLBFragment() {
    // 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_user_box_glb, container, false);

    globalGridView = view.findViewById(R.id.userBoxGlbGridView);
    globalGridView.setAdapter(new ImageAdapter(getContext()));
    return view;
}

}

Fragment2_ImageAdapter.java:

public class UserBoxGlbImageAdapter extends BaseAdapter {

Context mContext;

public UserBoxGlbImageAdapter(Context c) {
    mContext = c;
}

@Override
public int getCount() {
    return mGLBIcons.size();
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

// References to the images via a List
private List<Integer> mGLBIcons = new ArrayList<>();

// Used to add card icons from the mainScreenFragment
public List<Integer> getGLBIconsList() {
    return mGLBIcons;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    // If it's not recycled, initialize some attributes
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(225, 225));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageResource(mGLBIcons.get(position));
    return imageView;
}
}

Я действительно надеюсь, что вы поможете мне понять, что я делаю здесь неправильно. Является ли регистрация gridView в целом для контекстного меню проблемой? Это что-то еще?

Заранее спасибо.

0 ответов

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