[アンドロイド] RecyclerViewクリック項目ポップPopupWindow

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/sandalphon4869/article/details/100191612


序文

効果:
ここに画像を挿入説明

、LayoutInflater.from()コンテキストの問題

コアの問題は、[PopupWindowコンテキストが書く方法を知らないということですか?]

中のonClick()View popview = LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout, null, false);
から()のパラメータ
に()とonCreateViewHolder コンテキストが同じコンテキストですView view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);

あなたは書くことができparent.getContext()ますが、mcontextクラスのメンバ変数を書くことができ、。

1著:mcontext

ItemAdapter.java:RecyclerViewカスタム・アダプタ

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {

    private List<Item> mitemList;
    private Context mcontext;

    static class ViewHolder extends RecyclerView.ViewHolder{...}

    public ItemAdapter(Context context,List<Item> itemList)
    {
        this.mitemList=itemList;
        this.mcontext=context;
    }

    @Override
    public int getItemCount() {...}

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);
        final ViewHolder viewHolder=new ViewHolder(view);

        final View popview=LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout,null,false);
        ....
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {...}
}

2執筆:parent.getContext()

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_item,parent,false);
    final ViewHolder viewHolder=new ViewHolder(view);

    final View popview=LayoutInflater.from(parent.getContext()).inflate(R.layout.popupwindow_layout,null,false);
    final PopupWindow popupWindow=new PopupWindow(
            popview,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            true
    );

    viewHolder.itemBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            popupWindow.showAtLocation(popview,Gravity.CENTER,0,0);
        }
    });
    popview.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            popupWindow.dismiss();
        }
    });
    return viewHolder;
}

第二に、テキストの問題を設定します

:効果
こののは、あなたが別の表示ポップアップウィンドウ中国人を設定したい項目をクリックし異なるに基づいて行われます。

[コア問題:R.idののTextViewを見つけることができません]は
、他のコントロールのために、なぜそれR.idの表示オプションを知らないが、私たちが望むR.id.contentのTextViewが表示されません。あなただけが仕事を抜け出します。
ここに画像を挿入説明

[コアの問題:のsetText()メソッドはありません]
一緒に書いていない、仕事のために別々に書きます。

問題:
ここに画像を挿入説明
解決策:

TextView textView=popview.findViewById(R.id.content);
textView.setText("hello");

完全なソースコード


> ItemAdapter.java

```java
package com.example.myapplication;

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {

    private List<Item> mitemList;
    private Context mcontext;

    static class ViewHolder extends RecyclerView.ViewHolder
    {
        TextView itemName;
        TextView itemProgress;
        Button itemBtn;

        public ViewHolder(View view)
        {
            super(view);
            itemName=view.findViewById(R.id.name);
            itemProgress=view.findViewById(R.id.progress);
            itemBtn=view.findViewById(R.id.show);
        }
    }

    public ItemAdapter(Context context,List<Item> itemList)
    {
        this.mitemList=itemList;
        this.mcontext=context;
    }

    @Override
    public int getItemCount() {
        return mitemList.size();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);
        final ViewHolder viewHolder=new ViewHolder(view);

        final View popview=LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout,null,false);
        final PopupWindow popupWindow=new PopupWindow(
                popview,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                true
        );

        viewHolder.itemBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pos=viewHolder.getAdapterPosition();
                TextView textView=popview.findViewById(R.id.content);
                switch (pos)
                {
                    case 0:
                    {
                        textView.setText("hello");
                        break;
                    }
                    case 1:
                    {
                        textView.setText("world");
                        break;
                    }
                    default:
                        break;
                }
                popupWindow.showAtLocation(popview,Gravity.CENTER,0,0);
            }
        });
        popview.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                popupWindow.dismiss();
            }
        });
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item item=mitemList.get(position);
        holder.itemName.setText(item.getName());
        holder.itemProgress.setText(item.getProgress());
    }
}

おすすめ

転載: blog.csdn.net/sandalphon4869/article/details/100191612