2013-10-25 3 views
1

У меня есть toggleButton, что я хочу установить onTouchListener. Однако я получаю некоторые ошибки, поэтому не думаю, что я делаю это правильно.как реализовать onTouchListener?

Я объявил свою кнопку.

private ToggleButton pushBtn; 

Я установил свою активность для реализации View.onTouchListener.

public class InCallActivity extends SherlockFragmentActivity implements View.OnTouchListener { 

В OnCreate я написал:

pushBtn = (ToggleButton) findViewById(R.id.PTT_button3); 
pushBtn.setOnTouchListener(this); 

Затем я попытался использовать слушателя в классе ::

pushBtn.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // if more than one call, change this code 
     int callId = 0; 
     for (SipCallSession callInfo : callsInfo) 
     { 
      callId = callInfo.getCallId(); 
      Log.e(TAG, "" + callInfo.getCallId()); 

     } 
     final int id = callId; 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
      { 

       // press 
       pushBtn.setBackgroundResource(R.drawable.btn_blue_glossy); 
       pushBtn.setChecked(true); 
       OnDtmf(id, 17, 10); 
       OnDtmf(id, 16, 9); 

       return true; 
      } 
      case MotionEvent.ACTION_UP: 
      { 

       // release 
       pushBtn.setBackgroundResource(R.drawable.btn_lightblue_glossy); 
       pushBtn.setChecked(false); 
       OnDtmf(id, 18, 11); 
       OnDtmf(id, 18, 11); 

       return true; 
      } 
      default: 
       return false; 
     } 
    } 

}); 

У меня есть несколько ошибок, он говорит onTouch не но я сделал это? Также я поместил слушатель в классе, и теперь он жалуется на методе перед ним, говоря:

Syntax error on token "}", delete this token 

Но это было прекрасно, пока я не добавил слушателя, делает слушатель должен быть в методе или что-то?

В конце моего слушателя я получаю ошибку:

Syntax error, insert "}" to complete MethodBody 

Но я теперь знаю почему.

EDIT UPDATE

Вот мой OnCreate, я получаю nullpointerexception:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     //handler.setActivityInstance(this); 
     Log.d(THIS_FILE, "Create in call"); 
     setContentView(R.layout.in_call_main); 

     SipCallSession initialSession = getIntent().getParcelableExtra(SipManager.EXTRA_CALL_INFO); 
     synchronized (callMutex) { 
      callsInfo = new SipCallSession[1]; 
      callsInfo[0] = initialSession; 
     } 

     bindService(new Intent(this, SipService.class), connection, Context.BIND_AUTO_CREATE); 
     prefsWrapper = new PreferencesProviderWrapper(this); 

     // Log.d(THIS_FILE, "Creating call handler for " + 
     // callInfo.getCallId()+" state "+callInfo.getRemoteContact()); 
     powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, 
       "com.csipsimple.onIncomingCall"); 
     wakeLock.setReferenceCounted(false); 


     takeKeyEvents(true); 

     // Cache findViews 
     mainFrame = (ViewGroup) findViewById(R.id.mainFrame); 
     inCallControls = (InCallControls) findViewById(R.id.inCallControls); 
     inCallAnswerControls = (InCallAnswerControls) findViewById(R.id.inCallAnswerControls); 
     activeCallsGrid = (InCallInfoGrid) findViewById(R.id.activeCallsGrid); 
     heldCallsGrid = (InCallInfoGrid) findViewById(R.id.heldCallsGrid); 
     pushBtn = (ToggleButton) findViewById(R.id.PTT_button3); 
     //pushBtn.setOnTouchListener((OnTouchListener) this); 
     attachVideoPreview(); 

     inCallControls.setOnTriggerListener(this); 
     inCallAnswerControls.setOnTriggerListener(this); 

     if(activeCallsAdapter == null) { 
      activeCallsAdapter = new CallsAdapter(true); 
     } 
     activeCallsGrid.setAdapter(activeCallsAdapter); 


     if(heldCallsAdapter == null) { 
      heldCallsAdapter = new CallsAdapter(false); 
     } 
     heldCallsGrid.setAdapter(heldCallsAdapter); 


     ScreenLocker lockOverlay = (ScreenLocker) findViewById(R.id.lockerOverlay); 
     lockOverlay.setActivity(this); 
     lockOverlay.setOnLeftRightListener(this); 

     /* 
     middleAddCall = (Button) findViewById(R.id.add_call_button); 
     middleAddCall.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       onTrigger(ADD_CALL, null); 
      } 
     }); 
     if (!prefsWrapper.getPreferenceBooleanValue(SipConfigManager.SUPPORT_MULTIPLE_CALLS)) { 
      middleAddCall.setEnabled(false); 
      middleAddCall.setText(R.string.not_configured_multiple_calls); 
     } 
     */ 

     // Listen to media & sip events to update the UI 
     registerReceiver(callStateReceiver, new IntentFilter(SipManager.ACTION_SIP_CALL_CHANGED)); 
     registerReceiver(callStateReceiver, new IntentFilter(SipManager.ACTION_SIP_MEDIA_CHANGED)); 
     registerReceiver(callStateReceiver, new IntentFilter(SipManager.ACTION_ZRTP_SHOW_SAS)); 

     proximityManager = new CallProximityManager(this, this, lockOverlay); 
     keyguardManager = KeyguardWrapper.getKeyguardManager(this); 

     dialFeedback = new DialingFeedback(this, true); 

     if (prefsWrapper.getPreferenceBooleanValue(SipConfigManager.PREVENT_SCREEN_ROTATION)) { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 

     if (quitTimer == null) { 
      quitTimer = new Timer("Quit-timer"); 
     } 


     useAutoDetectSpeaker = prefsWrapper.getPreferenceBooleanValue(SipConfigManager.AUTO_DETECT_SPEAKER); 

     applyTheme(); 
     proximityManager.startTracking(); 

     inCallControls.setCallState(initialSession); 
     inCallAnswerControls.setCallState(initialSession); 




     pushBtn.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       //if more than one call, change this code 
       int callId = 0; 
       for (SipCallSession callInfo : callsInfo) { 
        callId = callInfo.getCallId(); 
        Log.e(TAG, ""+callInfo.getCallId()); 

       } 
       final int id= callId; 
       switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 

        //press 
        pushBtn.setBackgroundResource(R.drawable.btn_blue_glossy); 
        pushBtn.setChecked(true); 
        OnDtmf(id, 17, 10); 
        OnDtmf(id, 16, 9); 

        return true; 
       } 
       case MotionEvent.ACTION_UP: { 

        //release 
        pushBtn.setBackgroundResource(R.drawable.btn_lightblue_glossy); 
        pushBtn.setChecked(false); 
        OnDtmf(id, 18, 11); 
        OnDtmf(id, 18, 11); 

        return true; 
       } 
       default: 
        return false; 
       } 
      } 

     }); 




    } 

enter image description here

Линия с NullPointer 250 pushBtn.setOnTouchListener(new OnTouchListener() {

+4

, потому что есть недостающий '}' вы не закрываете метод onTouch –

+0

Я стараюсь это nd все еще есть ошибка, я думал, что скобки считаются правильными уже? – Paul

+0

buddy dont реализует onTouchListner() для вашего класса, поскольку вы привязываете его к самому представлению ...попробуйте удалить инструменты из класса. –

ответ

0

Вы s hould add '}' при закрытии метода touch.

+2

Я подсчитал скобки, и это, похоже, не так? – Paul

+0

скомпилируйте ваш код сейчас и вставьте здесь ошибку – morroko

+0

Я обновил OP с кодом onCreate, а также с ошибкой, теперь это nullpointerexception – Paul

0

Eclipse иногда совершает некоторые ошибки самостоятельно.

Ваш код кажется правильным, попробуйте вырезать весь ваш код, а затем снова вставьте его в том же положении.

Также попробуйте удалить все импорта в начале класса, а затем повторного импорта все, нажав

CTRL + SHIFT + O (Cmd + Shift + O на макинтош)

другое решение поставить

return false; 

в самом конце метода onTouch

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