Как сделать контекстное меню для элемента Grid View с помощью Base Adapter? - PullRequest
0 голосов
/ 20 мая 2019

Проблема:

Я хочу создать душ с видео в виде сетки. А в правом нижнем углу должна быть кнопка с тремя точками, которая при нажатии открывает контекстное меню.

ОБНОВЛЕНО getView ()

Вот пример изображения из приложения YouTube:

YouTube sample image https://i.imgur.com/Uqvf6JD.jpg

Мои коды: (Я не думаю, что вы будетенужен код, но в любом случае)

OnCreate ()


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        search_bar=findViewById(R.id.toolbar_search_slot);

        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        MainActivity.this.setTitle(" ");
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        getSupportActionBar().setDisplayShowHomeEnabled(false);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_24dp);


        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                search_bar.setVisibility(View.GONE);

                getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                getSupportActionBar().setHomeButtonEnabled(false);
            }
        });

checkpermission();

        videogridView=findViewById(R.id.video_grid_view);


        Thread thread =new GetAllMediaTasks();
        thread.start();







    }

Мой метод getView () из BaseAdapter для GridView


public class VideoItemAdapter extends BaseAdapter {
    private static final String TAG = "VideoItemAdapter";
    private Context context;
    private ArrayList<Video> videolist;
    ViewHolder viewHolder;
    private  String videoname;
    private String  videopath;
    private long videoduration;
    private Bitmap video_thumbnail_bitmap;


    public VideoItemAdapter(Context context,ArrayList<Video> videolist)
    {
        this.context=context;
        this.videolist=videolist;
    }



       @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        videoname = videolist.get(position).getVideoname();
        videopath = videolist.get(position).getVideopath();
        videoduration = videolist.get(position).getDuration();
        video_thumbnail_bitmap=videolist.get(position).getThumbnail();


        Log.d(TAG, "getView: videopath : "+videopath);




        if (convertView == null) {
            final LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.video_item, parent,false);

            final ImageView imageView= (ImageView)convertView.findViewById(R.id.video_item_bg);
            final TextView nameTextView = (TextView)convertView.findViewById(R.id.video_name_txt);
            final TextView videodurationTextView = (TextView)convertView.findViewById(R.id.video_duration_txt);
            final Button optionsmenubtn = convertView.findViewById(R.id.video_item_options_btn);
            final CardView cardView = convertView.findViewById(R.id.card_view_video_item);

            final ViewHolder viewHolder = new ViewHolder(nameTextView,videodurationTextView,imageView,optionsmenubtn,cardView);
            convertView.setTag(viewHolder);
            DisplayMetrics dm = new DisplayMetrics();
            ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
            int size = dm.widthPixels / 3;
            convertView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, size));

        }



        viewHolder = (ViewHolder)convertView.getTag();
        viewHolder.videodurationTextView.setText(msToString(videoduration));
        viewHolder.nameTextView.setText(videoname);

        Log.d(TAG, "getView: video path  :"+videolist.get(position).getVideopath()+" position "+position);

       // Bitmap bitmap3 = ThumbnailUtils.createVideoThumbnail(videopath, MediaStore.Video.Thumbnails.MINI_KIND);
        setThumbNailtoView(video_thumbnail_bitmap);

        // new MakeVideoThumbnail().execute(videopath);

        CardView cardView =viewHolder.cardView;
        Button optionsbutton = viewHolder.optionsmenubtn;




        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: clicked position : "+position);
                Intent intent =new Intent(context,VideoPlayer.class);
                Bundle bundle =new Bundle();
                bundle.putString("VideoPath",videopath);
                intent.putExtras(bundle);
                context.startActivity(intent);
            }
        });


        optionsbutton.setOnClickListener(new View.OnClickListener() {  // Three dot  button
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Clicked position : "+position, Toast.LENGTH_SHORT).show();
                v.setOnCreateContextMenuListener((Activity)context);

            }
        });

        //  viewHolder.cardView.setBackground(new BitmapDrawable(createThumbnailAtTime(videopath, 900)));

viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClick: clicked position : "+position);
        Intent intent =new Intent(context,VideoPlayer.class);
        Bundle bundle =new Bundle();
        bundle.putString("VideoPath",videopath);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
});

   return convertView;

    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        Toast.makeText(context, "Context Menu Clicked !", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select Action");
        MenuItem doWhatever = menu.add(Menu.NONE, 1, 1, "Do whatever");
        doWhatever.setOnMenuItemClickListener(this);

    }
}

item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="200dp"
    android:id="@+id/card_view_video_item"
    android:background="@color/colorPrimaryDark"
    >


        <ImageView
            android:id="@+id/video_item_bg"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY"
            />

        <RelativeLayout
            android:id="@+id/inside_cardview_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
android:background="@color/colorPrimaryDark"
            >


            <TextView
                android:id="@+id/video_duration_txt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="00:00:00"
                android:textColor="#fff"
                android:textStyle="bold"
                android:layout_above="@+id/video_name_txt"
                />

            <TextView
                android:id="@+id/video_name_txt"
                android:layout_width="350dp"
                android:layout_height="wrap_content"
                android:text="Some Moovie Name"
                android:textColor="#fff"
                android:textSize="25sp"
                android:layout_alignParentBottom="true"
                android:textStyle="bold" />

            <Button
                android:id="@+id/video_item_options_btn"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginTop="80dp"
                android:layout_alignParentEnd="true"
                android:layout_alignParentBottom="true"
                android:background="@drawable/ic_verthreedot_white_24dp"
                style="@style/Widget.AppCompat.Button.Borderless"
                 />




        </RelativeLayout>







</android.support.v7.widget.CardView>

LogCat

Logcat

Любая помощь будет оценена!

1 Ответ

1 голос
/ 20 мая 2019

Поместите трехточечную кнопку в ваш файл item_xml, затем установите OnClickListener на вашу кнопку и при нажатии этой кнопки сделайте следующее:

Теперь создайте файл меню XML и установите его, как показано ниже, и он должен работать очень хорошо.

 viewHolder.navigicon.setOnClickListener(new View.OnClickListener() {    
        @Override
        public void onClick(View v) {  
            PopupMenu popupMenu = new PopupMenu(mContext,v);
            popupMenu.inflate(R.menu.list_menu);
            popupMenu.show();
        }
    });
...