2013-02-25 45 views
11

setOnItemClickListener不适用于微调器。这里是我的代码...setOnItemClickListener不适用于微调器

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); 

       } 
      }); 
+0

你能提供一些更多的活动代码吗? – 2013-02-25 10:11:49

+0

请将您的适配器代码和您的微调项目的XML添加到问题 – 2013-02-25 10:12:05

回答

41

setOnItemClickListener不会与工作飞旋。尝试使用这种方法:

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 

      } 
     }); 
+4

微调问题是,如果您更改了选定的项目,并且从未单击相同的项目,需要一个itemClicked事件。 – 2014-01-30 21:51:40

0

我觉得supplier在你的代码意味着spinner,做替换该行

String msupplier=supplier.getSelectedItem().toString(); 

与以下行:

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

使用getItemAtPosition:

supplier.getItemAtPosition(position).toString(); 
3

我可能应该下台,但认为建议您使用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 
    } 
}); 
+0

谢谢Waqas .... – Sonu 2013-02-25 10:23:23

1

使用此

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 

     } 
    }); 
5

我认为你应该检查哪些包含微调您的XML文件。确保没有设置android:clickable = "false"

2.请检查您的微调适配器,并确保在您的getView(int position, View convertView, ViewGroup parent)方法,你没有设置任何插件点击回调事件,如ButtonImageviewTextView

3

OnItemSelectedListener()用于不同目的不是点击监听器。最重要的是,如果您再次单击当前选定的项目,它不会触发。在某些情况下,这可能不是问题,但在其他情况下,可能会有问题。所以真正的答案不是告诉人们使用不同的,可能不适合的听众,而是要解决原来的问题。 :-)

幸运的是,我们可以把点击监听器适配器上,而不是:

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); 
+0

你能否给出完整的工作示例。 – Noman 2015-05-04 12:16:37

+0

嗨,很好的工作,但如何在项目选择后崩溃微调? – 2016-02-20 10:03:46

0

我已经遇到了这个问题。 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) { 

     } 
    }); 
相关问题