У меня есть gridview
, который содержит некоторые предметы. Я хочу получить координаты экрана, касаясь любого элемента в сетке.Получение координат затронутого элемента внутри gridview
Я знаю, что могу это сделать, используя MotionEvent.getRawX
и MotionEvent.getRawY
. Проблема в том, что я не могу установить прослушиватель касания на элемент внутри сетки, он не срабатывает, я не знаю, почему. Я пытался установить слушателя для самого gridview, это работает, но как только я касаюсь любого элемента, callback вызывается более одного раза (2-4 раза). Вот мой код:
public class Calibration extends Activity {
List<String> list;
GridView grid;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calibration_activity);
list = new ArrayList<String>();
grid = (GridView) findViewById(R.id.gridView1);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
ArrayAdapter<String> adp = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, list);
grid.setAdapter(adp);
/*Working but appears 2-4 times*/
grid.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Toast.makeText(getBaseContext(), "(" + motionEvent.getRawX() + ", " + motionEvent.getRawY() + ")",
Toast.LENGTH_LONG).show();
return false;
}
});
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:background="#7CFC00"
android:gravity="center"
android:columnWidth="100dp"
android:stretchMode="columnWidth" />
Обратите внимание, что моя цель состоит в том, чтобы иметь ImageView
внутри не строковых значений gridView
. Я попробовал, чтобы ImageView заполнил адаптер, а затем установил на него слушателя, но это не сработало. Итак, я просто использую значения String в качестве примера для этого вопроса.
Как я могу решить эту проблему?
Спасибо Гильерме П. за полезный ответ, мне нужно когда-нибудь попробовать решение. Я попробую и дам вам знать. Но, пожалуйста, скажите мне, почему вызов был вызван несколько раз? Это потому, что одновременно происходят несколько событий? Благодарю. – Dania