4

ListView で OnItemClickListener と OnItemLongClickListener を使用しています。現在、OnItemLongClick の後のリリース アクションを検出する方法を探しています。これを達成するための最良の方法は何ですか?

4

2 に答える 2

7

@g00dyの回答を受け入れましたが、このソリューションが私のニーズによりよく適合し、コードを1か所に保持できることがわかりました。

私がこれをやっているlistViewをセットアップするActivityの中で:

MyOnLongClickListener myListener = new MyOnLongClickListener(this);
listView.setOnItemLongClickListener(myListener);
listView.setOnTouchListener(myListener.getReleaseListener());

すべての魔法は「MyOnLongClickListener」内で発生します。

public class MyOnLongClickListener implements AdapterView.OnItemLongClickListener {

    private View.OnTouchListener mReleaseListener = new OnReleaseListener();
    private boolean mEnabled = false;
    private Context mContext;

    public MyOnLongClickListener(Context context) {
        mContext = context;
    }

    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(mContext, "OnLongClick", Toast.LENGTH_SHORT).show();
        mEnabled = true;
        return true;
    }

    /**
     * Returns a listener for the release event.
     * @return
     */
    public View.OnTouchListener getReleaseListener() {
        return mReleaseListener;
    }

    /**
     * Listener for the Release event.
     */
    private class OnReleaseListener implements View.OnTouchListener {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getAction() == android.view.MotionEvent.ACTION_UP) {
                if(mEnabled) {
                    Toast.makeText(mContext, "Release", Toast.LENGTH_SHORT).show();
                    /* Execute... */
                    mEnabled = false;
                    return true;
                }
            }
            return false;
        }
    }

}
于 2013-08-09T12:08:33.757 に答える
2

ここ()を見てください (主にここ、探しているはずですACTION_UP):

public static final int ACTION_UP

API レベル 1 に追加された getAction() 値: キーが解放されました。

定数値: 1 (0x00000001)

何かのようなもの:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.ACTION_UP) {
        // do something on ACTION_UP.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
于 2013-08-09T11:06:04.070 に答える