recyclerView中的android spinner无法正常工作

recyclerView中的android spinner无法正常工作,android,android-recyclerview,spinner,adapter,Android,Android Recyclerview,Spinner,Adapter,我试图在我的recyclerView中使用微调器(3个点,带有下拉菜单),但当我加载此recyclerView函数时,会自动调用onItemSelected,稍后当我按下该项时,不会再调用它。以下是我在适配器中的代码: @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ArrayAdapter<CharSequenc

我试图在我的recyclerView中使用微调器(3个点,带有下拉菜单),但当我加载此recyclerView函数时,会自动调用onItemSelected,稍后当我按下该项时,不会再调用它。以下是我在适配器中的代码:

       @Override
       public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, R.array.my_listing_item_array, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ((SaleAdapter.SalesViewHolder) holder).overflow.setAdapter(adapter);

            ((SaleAdapter.SalesViewHolder) holder).overflow.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    Toast.makeText(context, String.valueOf(position) + " item is selected", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {

                }
            });

}

  public static class SalesViewHolder extends RecyclerView.ViewHolder {
      public LinearLayout overflowLayout;
      public Spinner overflow;

      public SalesViewHolder(View itemView, Context context) {
          super(itemView);

          overflowLayout = (LinearLayout) itemView.findViewById(R.id.list_item_overflow_layout);
          overflow = (Spinner) itemView.findViewById(R.id.list_item_overflow);
      }
     }
@覆盖
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
ArrayAdapter=ArrayAdapter.createFromResource(context,R.array.my_listing_item_array,android.R.layout.simple_spinner_item);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
((SaleAdapter.saleViewHolder)holder).overflow.setAdapter(适配器);
((SaleAdapter.saleViewHolder)holder).overflow.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
Toast.makeText(上下文、字符串、valueOf(位置)+“项目已选定”,Toast.LENGTH_SHORT.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
}
公共静态类SalesViewHolder扩展了RecyclerView.ViewHolder{
公共线路布局-飞越布局;
公共微调器溢出;
public SalesViewHolder(查看项目视图、上下文){
超级(项目视图);
overflowLayout=(LinearLayout)itemView.findViewById(R.id.list\u item\u overflow\u布局);
溢出=(微调器)itemviewbyd(R.id.list\u item\u溢出);
}
}
以下是查看代码:

<LinearLayout
    android:id="@+id/list_item_overflow_layout"
    android:layout_width="54dp"
    android:layout_height="54dp"
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:padding="15dp"
    android:background="@drawable/ic_more_vert_24dp_grey"
    >

    <Spinner
        android:id="@+id/list_item_overflow"
        android:layout_width="24dp"
        android:layout_height="24dp"
        />


</LinearLayout>

有人知道我的代码有什么问题吗?我是否应该将setOnItemSelectedListener导出到其他地方?

最好为列表中的每个项目使用一个。使用
ImageView
代替将显示“3点”图标的
Spinner
。当有人单击这些点时,弹出菜单将。。。弹出

分步骤:

1) 将xml布局中的
微调器
替换为将显示三点图标的
图像视图

2) 在
RecyclerView.Adapter
中定义一个侦听器类,并在那里保存一个实例

3) 在
SalesViewHolder
内部设置一个
OnClickListener
来响应点击

4) 从活动中弹出

您的新适配器应该如下所示

class SalesAdapter extends RecyclerView.Adapter<SalesViewHolder>{
    public interface OnMenuItemClickListener{
        void onMenuItemClicked(ImageView view);
    }

    private OnMenuItemClickListener listener;

    public void setOnMenuItemClickListener(OnMenuItemClickListener listener){
        this.listener = listener;
    }

    public static class SalesViewHolder extends RecyclerView.ViewHolder {
        public LinearLayout overflowLayout;
        public ImageView menu;

    public SalesViewHolder(View itemView, Context context) {
        super(itemView);

        overflowLayout = (LinearLayout) itemView.findViewById(R.id.list_item_overflow_layout);
        menu= (ImageView) itemView.findViewById(R.id.imageview_id);
        // Make sure to enable lambdas
        menu.setOnClickListener( (view) -> {
            if( listener != null ){
                listener.onMenuItemClicked(view);
            }
        }
    }
     }

}
class YourActivity extends Activity implements SalesAdapter.OnMenuItemClickListener{

    // Don't forget to set the listener to the adapter,  let's suppose that happens in onCreate()
    @Override
    public void onCreate(Bundle arg){
        SalesAdapter adapter = new SalesAdapter();
        adapter.setOnMenuItemClickListener(this);
    }

    @Override
    public void onMenuItemClicked(ImageView menu){
        showPopUp(menu);
    }

    private void showPopup(View v) {
        PopupMenu popup = new PopupMenu(this, v);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.actions, popup.getMenu());
        popup.show();
    }

}

别忘了提供菜单操作等。。。如前所述

因此,recyclerview中的每个项目都包含一个微调器,该微调器想要模仿菜单下拉菜单?Tomas,是的,你是对的。我认为最好为每个recyclerview项目实现一个弹出菜单,而不是微调器。正如文档所说,“提供一个类似微调器的下拉菜单,不保留持久选择。”Tomas,但弹出式菜单要求每个项目都有清晰的坐标,这在回收器视图中是不可能的。也许你知道一些不需要的弹出菜单的例子吗?