2013-09-20 3 views
4

Таким образом, я хочу, чтобы назначить Spinner OnClick, но я получаю следующее сообщение об ошибкеAndroid - Spinner + setOnClickListener

 java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead 

мне это нужно, чтобы собрать данные, когда я нажимаю на блесну, а затем использовать его позже. Я знаю, что делал это раньше, но я потерял код. Googled для ответа, я не нашел ничего, что работает. Если это помогает, я использую макет 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; 
     } 

Есть ли способ, я могу это сделать? Спасибо!

ответ

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

«Мне нужно, чтобы собирать данные, когда я нажимаю на счетчик». Пожалуйста, прочитайте мой пост! Мне не нужен OnItemSelectedListener. Кроме того, GPU_LAYOUT является основным ScrollView. – AlphaVladim

+0

Возможно, вам стоит сделать что-то подобное: public static class CustomSpinner extends Spinner { private OnSpinnerEventsListener mListener; @Override public boolean performClick() {mOpenInitiated = true; если (mListener! = NULL) {// здесь захватить данные, которые вы хотите mListener.onSpinnerOpened();} вернуть super.performClick();} общественности недействительным setSpinnerEventsListener (OnSpinnerEventsListener OnSpinnerEventsListener) { mListener = onSpinnerEventsListener; } public void performClosedEvent() { mOpenInitiated = false; если (mListener! = Null) { mListener.onSpinnerClosed(); } } } – Aiapaec

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 для сбора некоторых данных, когда я нажимаю на счетчик, а не когда я выбираю элемент из него. – AlphaVladim

+0

Вполне возможно, это поможет вам http://stackoverflow.com/questions/18447063/spinner-get-state-or-get-notified-when-opens – Furqan

+0

Нет, это не поможет. Спасибо! – AlphaVladim

5

Вы можете сделать это с setOnTouchListener таким образом:

spinner.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       Toast.makeText(getBaseContext(), "CLICK", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 
+0

Я не уверен, что это правильный/действительный способ, но он работает. – Tomasz

Смежные вопросы