Java Android - Spinner + setOnClickListener
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18911607/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android - Spinner + setOnClickListener
提问by AlphaVladim
So, i want to assign a Spinner OnClick, but i get the following error
所以,我想分配一个 Spinner OnClick,但我收到以下错误
java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
I need it to collect data when i click the spinner, then use it later. I know i did it before, but i lost the code. Googled for an answer, i didn't find anything that works. If this helps, I am using pagerview layout. Here is my code:
当我单击微调器时,我需要它来收集数据,然后再使用它。我知道我以前做过,但我丢失了代码。用谷歌搜索答案,我没有找到任何有用的东西。如果这有帮助,我正在使用 pagerview 布局。这是我的代码:
public class DATA extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
ScrollView GPU_LAYOUT = (ScrollView)inflater.inflate(R.layout.gpu, container, false);
final TextView higher_than =(TextView) GPU_LAYOUT.findViewById(R.id.gpu_higher_than_value);
final Spinner min_max =(Spinner) GPU_LAYOUT.findViewById(R.id.min_max_spinner_gpulay);
min_max.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String TMP=min_max.getSelectedItem().toString();
higher_than.setText(TMP);
}
});
return GPU_LAYOUT;
}
Is there any way i can do it? Thank you!
有什么办法可以做到吗?谢谢!
采纳答案by Alejandro Cumpa
I'm doing it like this:
我是这样做的:
public void addListenerOnSpinnerItemSelection() {
mySpinner = (Spinner) findViewById(R.id.GPU_LAYOUT);
mySpinner.setOnItemSelectedListener(new myOnItemSelectedListener());
}
public class myOnItemSelectedListener implements OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1, int pos,long arg3) {
int position=Arrays.asList(getResources().getStringArray(R.array.GPU_LAYOUT)).indexOf(fecha); }
@Override
public void onNothingSelected(AdapterView<?> arg0) { }
}
Also I suggest to get the position of the group you're using and then handle it.
此外,我建议获取您正在使用的组的位置,然后处理它。
回答by Furqan
min_max.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
//whatever your logic is put it here
}
});
回答by Javier Roberto
You can do it with setOnTouchListener in that way:
您可以通过 setOnTouchListener 以这种方式做到这一点:
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Toast.makeText(getBaseContext(), "CLICK", Toast.LENGTH_SHORT).show();
return false;
}
});
回答by Ehsan Rafique
you can't use setOnClickListener
directly on a Spinner. If you want to do it here is a trick.
您不能setOnClickListener
直接在 Spinner 上使用。如果你想这样做,这是一个技巧。
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (view.getId()) {
case R.id.sp_category:
if (motionEvent.getAction() == MotionEvent.ACTION_UP)//replacing with onclick
{
//Perform any action
}
break;
}
return true;
}
In this code MotionEvent.ACTION_UP
will make this touch act like onclick.
Hope it will help you!
在这段代码中,MotionEvent.ACTION_UP
这个触摸就像 onclick 一样。希望它会帮助你!