Передать значения из элемента Gridview, щелкнувшего во всплывающее окно - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть вид сетки во фрагменте и всплывающее окно, открытое при щелчке.Как я могу передать те же данные (изображение, заголовок, описание) во всплывающее окно?

GridView и код PopupWindow (во фрагменте)

GridView gridView = myFragment.findViewById(R.id.gridview);
        final AchievementsAdapter achievementsAdapter = new AchievementsAdapter(getActivity(), books);
        gridView.setAdapter(achievementsAdapter);


        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Achievement achievement = (Achievement) parent.getItemAtPosition(position);



                showPopup(view);

            }
        });

public void showPopup(View anchorView) {

        View popupView = getLayoutInflater().inflate(R.layout.achievement_details, null);
        ImageView close_window = popupView.findViewById(R.id.close_button);



        final PopupWindow popupWindow = new PopupWindow(popupView,
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        // Example: If you have a TextView inside `popup_layout.xml`
        TextView tv =  popupView.findViewById(R.id.title);

        tv.setText("Badge Title");

        // If the PopupWindow should be focusable
        popupWindow.setFocusable(true);

        // If you need the PopupWindow to dismiss when when touched outside

        int location[] = new int[2];

        // Get the View's(the one that was clicked in the Fragment) location
        anchorView.getLocationOnScreen(location);

        // Using location, the PopupWindow will be displayed right under anchorView
        popupWindow.showAtLocation(anchorView, Gravity.CENTER,
                location[0], location[0] + anchorView.getHeight());

        View.OnClickListener cancel_button_click_listener = new View.OnClickListener() {
            public void onClick(View v) {
                popupWindow.dismiss();

            }
        };
        close_window.setOnClickListener(cancel_button_click_listener);

    }

Модель достижений

public class Achievement {
    private final int name;
    private final int author;
    private final int imageResource;
    private boolean isFavorite = false;
    private final String imageUrl;

    public Achievement(int name, int author, int imageResource, String imageUrl) {
        this.name = name;
        this.author = author;
        this.imageResource = imageResource;
        this.imageUrl = imageUrl;
    }

    public int getName() {
        return name;
    }

    public int getAuthor() {
        return author;
    }

    public int getImageResource() {
        return imageResource;
    }

    public boolean getIsFavorite() {
        return isFavorite;
    }
    public void setIsFavorite(boolean isFavorite) {
        this.isFavorite = isFavorite;
    }

    public void toggleFavorite() {
        isFavorite = !isFavorite;
    }

    public String getImageUrl() {
        return imageUrl;
    }

Я пытался с намерением (вероятно, не работает).Я попытался с положенным дополнительным, но поскольку я не слишком хорош в этом, не справился с этим.Один из способов, который я подумал - сделать всплывающее окно новым действием, а затем передать данные с намерением, но если есть способ (я надеюсь, что есть), я бы предпочел передать значения во фрагменте как есть.

Если вам понадобится больше кода, пожалуйста, сообщите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...