Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SetonimeClickListener不';不要使用Android Spinner_Android_Spinner - Fatal编程技术网

SetonimeClickListener不';不要使用Android Spinner

SetonimeClickListener不';不要使用Android Spinner,android,spinner,Android,Spinner,setOnItemClickListener不适用于android Spinner。这是我的密码: supplier.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position,

setOnItemClickListener不适用于android Spinner。这是我的密码:

supplier.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    // TODO Auto-generated method stub

                    String msupplier=supplier.getSelectedItem().toString();
                    Log.e("Selected item : ",msupplier);

                }
            });
supplier.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
//TODO自动生成的方法存根
字符串msupplier=supplier.getSelectedItem().toString();
Log.e(“所选项目:”,msupplier);
}
});

我认为
供应商
在您的代码中是指
微调器
,请务必更换这一行

 String msupplier=supplier.getSelectedItem().toString();
使用以下行:

 String msupplier= supplier.getItemAtPosition(position).toString(); 

使用getItemAtPosition:

supplier.getItemAtPosition(position).toString();

我可能偏离了方向,但我想建议您使用
OnItemSelectedListener
,它比微调器的
OnItemClickListener
更广泛:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        //do something here
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        //optionally do something here
    }
});
supplier.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(适配器视图arg0、视图arg1、内部arg2、,
长arg3){
//在这里做点什么
}
@凌驾
未选择公共无效(AdapterView arg0){
//在这里做点什么
}
});
使用此

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });
supplier.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});

setOnItemClickListener将无法与android spinner一起使用。或者,尝试使用以下方法:

setOnItemSelectedListener

按如下方式更改代码:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                String msupplier=supplier.getSelectedItem().toString();

                Log.e("Selected item : ",msupplier);
}

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
supplier.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
字符串msupplier=supplier.getSelectedItem().toString();
Log.e(“所选项目:”,msupplier);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});

1.我认为您应该检查包含微调器的xml文件。确保没有设置android:clickable=“false”


2.请检查微调器适配器,并确保在
getView(int位置、视图转换视图、视图组父级)
方法中,您没有设置任何小部件单击回调事件,例如
按钮
图像视图
文本视图
OnItemSelectedListener()
的用途与单击侦听器不同。最重要的是,如果再次单击当前选定的项目,它不会触发。在某些情况下,这可能不是问题,但在其他情况下,很可能是问题。因此,真正的答案不是告诉人们使用不同的、可能不合适的听众,而是解决最初的问题。:-)

幸运的是,我们可以将click listener放在适配器上:

public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter {
  protected OnItemClickListener listener;

  public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) {
    super();

    this.listener = listener;
  }

  @Override
  public View getDropDownView(final int position, View convertView, final ViewGroup parent) {
    if (convertView == null)
      convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false);

    convertView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (listener != null)
          listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position));
      }
    });


    // ...

    return convertView;
  }
}
Spinner spinner = (Spinner) findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO
  }
});
spinner.setAdapter(spinnerAdapter);
公共类SpinnerClickAdapter扩展BaseAdapter实现SpinnerAdapter{
受保护的侦听器侦听器;
公共SpinnerClickAdapter(上下文上下文,…,OnItemClickListener侦听器){
超级();
this.listener=listener;
}
@凌驾
公共视图getDropDownView(最终整型位置、视图转换视图、最终视图组父视图){
if(convertView==null)
convertView=LayoutFlater.from(上下文)。充气(R.layout.yourlayout,false);
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(侦听器!=null)
onItemClick((AdapterView)父对象,v,position,getItemId(position));
}
});
// ...
返回视图;
}
}
然后我们可以像往常一样使用它,唯一的区别是不在微调器上设置,而是在适配器上设置:

public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter {
  protected OnItemClickListener listener;

  public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) {
    super();

    this.listener = listener;
  }

  @Override
  public View getDropDownView(final int position, View convertView, final ViewGroup parent) {
    if (convertView == null)
      convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false);

    convertView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (listener != null)
          listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position));
      }
    });


    // ...

    return convertView;
  }
}
Spinner spinner = (Spinner) findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO
  }
});
spinner.setAdapter(spinnerAdapter);
微调器微调器=(微调器)findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter=新SpinnerClickAdapter(上下文,…,新AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//待办事项
}
});
spinner.setAdapter(spinnerAdapter);

我曾经面对过这个问题。setOnItemClickListener不能与微调器一起使用。我的解决办法如下:

mSpinnerYears.setAdapter(adapter);
    mSpinnerYears.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Logger.d(new StringBuilder(2).append("TAG:").append(TAG).toString(),
                    new StringBuilder(3).append("click pos = ").append(position).append(
                            mSpinnerYears.getItemAtPosition(position).toString()).toString());
        }

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

        }
    });
mSpinnerYears.setAdapter(适配器);
mSpinnerYears.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Logger.d(新的StringBuilder(2).append(“标记:”).append(标记).toString(),
新建StringBuilder(3).append(“单击pos=”).append(位置).append(
mSpinnerYears.getItemAtPosition(position.toString()).toString();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});

您可以提供该活动的更多代码吗?请将您的适配器代码和微调器项的xml添加到问题中。微调器的问题是,您只会在更改选定项时收到通知,而不会在单击同一项时收到通知,因此需要一个itemClicked事件。嗨,干得好,但如何在选择项目后折叠微调器?