Android - Spinner + setOnClickListener

7
所以,我想为Spinner分配OnClick事件,但是我遇到了以下错误。
     java.lang.RuntimeException: Don't call   setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead

我需要在点击spinner时收集数据,然后稍后再使用它。 我知道以前做过,但是我丢失了代码。搜索答案,但没有找到可用的。 如果有帮助的话,我正在使用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;
      }

有什么方法可以做到吗?谢谢!
4个回答

9
您可以通过以下方式使用setOnTouchListener实现:
spinner.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Toast.makeText(getBaseContext(), "CLICK", Toast.LENGTH_SHORT).show();
                return false;
            }
        });

3
我现在这样做:
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) {        }       
}

我建议获取您正在使用的组的位置,然后处理它。

1
我需要在点击Spinner时收集数据。请仔细阅读我的帖子!我不需要OnItemSelectedListener。此外,GPU_LAYOUT是主要的ScrollView。 - AlphaVladim
或许你应该像这样做: public static class CustomSpinner extends Spinner{ private OnSpinnerEventsListener mListener; @Override public boolean performClick() {mOpenInitiated = true; if (mListener != null) {//在此处获取所需的数据 mListener.onSpinnerOpened();} return super.performClick();} public void setSpinnerEventsListener(OnSpinnerEventsListener OnSpinnerEventsListener) { mListener = onSpinnerEventsListener; }public void performClosedEvent() { mOpenInitiated = false; if (mListener != null) { mListener.onSpinnerClosed(); } }} - Alejandro Cumpa

0

你不能直接在Spinner上使用setOnClickListener。如果你想要这样做,这里有一个诀窍。

 @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;
}

在这段代码中,MotionEvent.ACTION_UP 会使这个触摸行为像是 onclick。 希望对你有所帮助!

0
min_max.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

    //whatever your logic is put it here 
 }
}); 

1
对不起,你误解了。我需要使用setOnClickListener在我按下Spinner时收集一些数据,而不是在我从中选择一个项目时。 - AlphaVladim
好的,也许这会对你有所帮助: https://dev59.com/gGMl5IYBdhLWcg3wZGLo - Furqan
不,这并没有帮助。谢谢! - AlphaVladim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接