AndroidでSpinnerでLongClick を感知させる方法はありますか?
onItemLongClickがspinnerで使えないのは、確認済みです。
このコードのように、Handlerを使って、onTouch()で、1000m秒後にボタンが押されていれば、長押し、として、認めるというコードを書きたいです。
そして、onItemSelected()で、選択された物のデータを取得して、データベースからdeleteしたいです。
アドバイスをどうぞよろしくお願いします。
final Handler actionHandler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(LocationActivity.this, "Long click", Toast.LENGTH_SHORT);
toast.show();
}
};
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Spinner spinner = (Spinner) parent;
// deleteitem = (String) spinner.getSelectedItem();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
actionHandler.postDelayed(runnable, 1000);
//ここで、押してから1秒後にelse ifだったら、ロングクリックと判断して、行動を起こす?
} else if (event.getAction() == MotionEvent.ACTION_UP) {
actionHandler.removeCallbacks(runnable);
}
return false;
}
});
//--------------ここからonItemSelect-------------//
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
//この下2行は正しいとこに
Spinner spinner = (Spinner) parent;
deleteitem = (String) spinner.getSelectedItem();
//-------------------------ここで、長押しされた時のaction-------------------//
//--------------ここで、消していいですか?を確認のダイアログを出力--------------//
LayoutInflater inflater = (LayoutInflater) LocationActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.dialog_deleteplace_us, (ViewGroup) findViewById(R.id.layout_deleteplace));
// アラーとダイアログ を生成
AlertDialog.Builder builder = new AlertDialog.Builder(LocationActivity.this);
builder.setView(layout);
//---------dailogの削除ボタンを追加、それが押されたらデータベースから削除する--------//
builder.setPositiveButton("削除", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (deleteitem.equals("GPSの現在地")) {
} else if (deleteitem.equals("googlemapで検索")) {
} else {
String sql = "delete from favorite where placename = '" + deleteitem + "' " +
"and username = '" + username + "';";
System.out.println(sql + "いいいいいいいいいいいいいいいいいいいいい");
System.out.println(deleteitem);
MyOpenHelper helper = new MyOpenHelper(LocationActivity.this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.rawQuery(sql, null);
c.moveToFirst();
onStart();
}
}
});
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});