package com.orhanobut.dialogplus; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import androidx.annotation.NonNull; public class GridHolder implements HolderAdapter, AdapterView.OnItemClickListener { private final int columnNumber; private int backgroundResource; private GridView gridView; private ViewGroup headerContainer; private ViewGroup footerContainer; private OnHolderListener listener; private View.OnKeyListener keyListener; private View headerView; private View footerView; public GridHolder(int columnNumber) { this.columnNumber = columnNumber; } @Override public void addHeader(@NonNull View view) { addHeader(view, false); } @Override public void addHeader(@NonNull View view, boolean fixed) { headerContainer.addView(view); headerView = view; } @Override public void addFooter(@NonNull View view) { addFooter(view, false); } @Override public void addFooter(@NonNull View view, boolean fixed) { footerContainer.addView(view); footerView = view; } @Override public void setAdapter(@NonNull BaseAdapter adapter) { gridView.setAdapter(adapter); } @Override public void setBackgroundResource(int colorResource) { this.backgroundResource = colorResource; } @Override @NonNull public View getView(@NonNull LayoutInflater inflater, ViewGroup parent) { View view = inflater.inflate(R.layout.dialog_grid, parent, false); View outMostView = view.findViewById(R.id.dialogplus_outmost_container); outMostView.setBackgroundResource(backgroundResource); gridView = view.findViewById(R.id.dialogplus_list); gridView.setNumColumns(columnNumber); gridView.setOnItemClickListener(this); gridView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyListener == null) { throw new NullPointerException("keyListener should not be null"); } return keyListener.onKey(v, keyCode, event); } }); headerContainer = view.findViewById(R.id.dialogplus_header_container); footerContainer = view.findViewById(R.id.dialogplus_footer_container); return view; } @Override public void setOnItemClickListener(OnHolderListener listener) { this.listener = listener; } @Override public void setOnKeyListener(View.OnKeyListener keyListener) { this.keyListener = keyListener; } @Override @NonNull public View getInflatedView() { return gridView; } @Override public View getHeader() { return headerView; } @Override public View getFooter() { return footerView; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (listener == null) { return; } listener.onItemClick(parent.getItemAtPosition(position), view, position); } }