1

onTouchListener を設定したい toggleButton があります。ただし、いくつかのエラーが発生しているため、これを正しく行っているとは思いません。

ボタンを宣言しました。

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

しかし、私は今その理由を知っています。

更新を編集

これが私の 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;
                }
            }

        });




    }

ここに画像の説明を入力

nullpointer 250 のある行はpushBtn.setOnTouchListener(new OnTouchListener() {

4

2 に答える 2

0

Eclipse 自体が間違いを犯すことがあります。

あなたのコードは正しいようです。すべてのコードを切り取ってから、同じ位置にもう一度貼り付けてみてください。

また、クラスの先頭にあるすべてのインポートを削除してから、を押してすべてを再インポートしてみてください

ctrl + SHIFT + o (Mac では cmd + shift + o)

別の解決策は、

return false;

onTouch メソッドの最後に

于 2013-10-25T12:32:35.503 に答える
0

タッチ メソッドを閉じるときに「}」を追加する必要があります。

于 2013-10-25T11:54:39.890 に答える