私のアクティビティにはリストビューがあり、そのために と の両方がonItemClickListener
ありonTouchListener
ます。list.OnTouch
メソッドの行をクリックすると、 forMotionEvent
Down
とが呼び出されUp
ます。どちらの場合も、タッチイベントを処理したくないが、それを観察したいだけなので、「false」を返します。現時点では、電話するべきだったと思いonItemClick
ますが、それは起こりません。しかし、リストビューを移動すると、OnTouch
モーションイベント「move」が呼び出され、その後アイテムをクリックするとトリガーされます。では、なぜitemClick
最初にトリガーされず、リストビューでの移動後にトリガーされたのですか?
コード:
public class MainActivity extends Activity {
Handler rHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) this.findViewById(R.id.mylist);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
System.out.println("An Item is clicked not touched");
}
});
rHandler = new Handler(this,lv);
}
}
アダプターにカスタム ListView lv を入力していますが、そのリスト行は textViews と imageViews で構成されています。また、imageViews にいくつかの onclick イベントがあります。そのため、android:focusable と android:focusableInTouchMode を imageView.
Handler.java 内
public class Handler implements View.OnTouchListener {
public Handler(Context mContext,ListView lv) {
lv.setOnTouchListener(this);
}
@Override
public final boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
System.out.println(" Motion ... ");
break;
}
case MotionEvent.ACTION_DOWN: {
System.out.println(" Motion Down ");
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
System.out.println(" Motion Up ");
break;
}
}
System.out.println("I am returning false");
return false;
}
}
画像のonClickイベントをクリックすると、またはリストを移動すると、OnItemClickがアクティブになりました。非常に奇妙に見えます!!!