有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SetOnKeyListener不使用gridview

我试了很多,但都没能成功。我在网格中有一些图片,我想用d-pad导航。为此,我正在实现setOnKeyListerner,但它给了我这个错误。 “无法解析setOnKeyListener(匿名方法安卓.view.view.OnKeyListener)”

public class GridView_Holder extends RecyclerView.ViewHolder implements
    OnClickListener {
// View holder for gridview recycler view as we used in listview
public TextView grid_title, grid_location, grid_date;
public ImageView grid_imageView, grid_delete;
public RelativeLayout gridLayout;

private RecyclerView_OnClickListener.OnClickListener onClickListener;

public GridView_Holder(View view) {
    super(view);
    // Find all views ids
    this.grid_title = (TextView) view.findViewById(R.id.grid_title);
    this.grid_location = (TextView) view.findViewById(R.id.grid_location);
    this.grid_date = (TextView) view.findViewById(R.id.grid_dateconstructed);
    this.grid_imageView = (ImageView) view.findViewById(R.id.grid_imageview);
    this.grid_delete = (ImageView) view.findViewById(R.id.grid_delete);
    this.gridLayout = (RelativeLayout) view.findViewById(R.id.grid_layout);

    // Implement click listener over views that we want
    this.gridLayout.setOnClickListener(this);
    this.grid_delete.setOnClickListener(this);

}

@Override
public void onClick(View v) {

    // set custom listener
    if (onClickListener != null) {
        onClickListener.OnItemClick(v, getAdapterPosition());

    }

}

// Setter for listener
public void setClickListener(
        RecyclerView_OnClickListener.OnClickListener onClickListener) {
    this.onClickListener = onClickListener;
}

适配器代码

public class GridView_Recycler_Adapter extends RecyclerView.Adapter<GridView_Holder> {

private ArrayList<Data_Model> arrayList;
private Context context;

public GridView_Recycler_Adapter(Context context,
        ArrayList<Data_Model> arrayList) {
    this.context = context;
    this.arrayList = arrayList;

}

@Override
public int getItemCount() {
    return (null != arrayList ? arrayList.size() : 0);

}

@Override
public void onBindViewHolder(GridView_Holder holder, int position) {

    // Now in this method the items will set and click listener will occur
    final Data_Model model = arrayList.get(position);

    GridView_Holder gridHolder = (GridView_Holder) holder;// Holder
    Bitmap image = BitmapFactory.decodeResource(context.getResources(),
            model.getImage());// Converting drawable into bitmap

    // setting data over views
    gridHolder.grid_title.setText(model.getTitle());
    gridHolder.grid_location.setText(model.getLocation());
    gridHolder.grid_date.setText(model.getYear());
    gridHolder.grid_imageView.setImageBitmap(image);

    gridHolder.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            switch (keyCode) {
                case KeyEvent.KEYCODE_DPAD_RIGHT:
                    Log.e("right button", "yes");
                    break;
                case KeyEvent.KEYCODE_DPAD_LEFT:
                    Log.e("left button", "yes");
                    break;
                case KeyEvent.KEYCODE_DPAD_UP:
                    Log.e("up", "yes");
                    break;
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    Log.e("down button", "yes");
                    break;
                default:
                    break;
            }

            return false;
        }
    });

}
@Override
public GridView_Holder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

    // This method will inflate the layout and return as viewholder
    LayoutInflater mInflater = LayoutInflater.from(viewGroup.getContext());

    ViewGroup mainGroup = (ViewGroup) mInflater.inflate(
            R.layout.grid_customview, viewGroup, false);
    GridView_Holder gridHolder = new GridView_Holder(mainGroup);
    return gridHolder;

}
}

共 (1) 个答案

  1. # 1 楼答案

    使用RecyclerView.Adapter<MenuAdapter.MyViewHolder> implements View.OnKeyListener

    @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            return false;
        }