1

コードは非常に単純です.メッセージをトーストしようとしているだけで、何らかの理由で動作が2つのケースで異なります。

ケース 1: これは機能しています:

コードは次のとおりです。

 @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.webopen);


            TextView sometext = (TextView)findViewById(R.id.click);
            sometext.setOnLongClickListener(new OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {
                    Toast.makeText(getApplicationContext(), "Long click Working", Toast.LENGTH_LONG).show();
                    return false;
                }
            });


            }

ケース 2: 動作しない! うまくいかない理由が知りたい

public class OnClick extends Activity implements OnLongClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webopen);

        TextView sometext = (TextView) findViewById(R.id.click);

    }

    @Override
    public boolean onLongClick(View v) {

        switch (v.getId()) {
        case R.id.click:
            Toast.makeText(getApplicationContext(), "Long click enabled",
                    Toast.LENGTH_LONG).show();
            // OR
            // Something();
            break;

        default:
            break;
        }

        return false;
    }

    public boolean Something() {

        Toast.makeText(getApplicationContext(), "Long click enabled",
                Toast.LENGTH_LONG).show();
        return true;
    }
}

コードについては何も素晴らしいことはありませんが、 onLongClickListener が機能しない理由を知りたいだけです。

どんな提案も役に立ちます..:)

4

3 に答える 3

2

onLongClickのリスナーを登録しませんTextView。コードに次の行を追加するonCreateと、機能するはずです。

sometext.setOnLongClickListener(this);
于 2014-02-17T17:32:53.487 に答える
2

onLongClickListenerfor を設定していませんsomeText。これを追加する必要があります:

someText.setOnLongClickListener(this);

この行は、リスナー オブジェクトをオブジェクトにアタッチしますTextView。最初のケースでは、 を呼び出しますsetOnLongClickListener。これが機能する理由です。この例では、新しいonLongClickListenerオブジェクトin-lineを作成しています。

2 番目の例では、 yourActivityは を継承OnLongClickListenerしているため、そのオブジェクトのインスタンスになります。したがって、 のリスナーを設定するには、現在のクラスへの参照であるsomeTextlistener を渡します。this

于 2014-02-17T17:33:43.090 に答える
1

のケース 2 がsetOnLongClickListenerありませんsometext

TextView sometext = (TextView) findViewById(R.id.click);  
sometext.setOnLongClickListener(this); // missing

最初のケースでは、匿名の内部クラスを使用しました。

2番目に、クラスがインターフェースを実装しますOnLongClickListener

于 2014-02-17T17:32:03.210 に答える