recyclerView中的android spinner无法正常工作
我试图在我的recyclerView中使用微调器(3个点,带有下拉菜单),但当我加载此recyclerView函数时,会自动调用onItemSelected,稍后当我按下该项时,不会再调用它。以下是我在适配器中的代码: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
@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,但弹出式菜单要求每个项目都有清晰的坐标,这在回收器视图中是不可能的。也许你知道一些不需要的弹出菜单的例子吗?