@prokopov-vi

Как исправить ошибку при использовании onTouch и onClick?

Столкнулся с проблемой, при использовании методов onTouch() и onClick(). Дело в том, что, если эти оба методы определить в одном классе - то onTouch() не срабатывает!

public class GridViewAdapter extends ArrayAdapter<TaskName> implements  View.OnTouchListener, View.OnClickListener{

    public GridViewAdapter(Context context, ArrayList<TaskName> taskNames){
        super(context, 0 , taskNames);
        this.context = (MainGridActivity) context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            convertView = context.getLayoutInflater().inflate(R.layout.grid_view_item, null);
        }
        convertView.setTag(position);

        convertView.setOnTouchListener(this);
        convertView.setOnClickListener(this);

        taskName = getItem(position);
        nameView = (TextView) convertView.findViewById(R.id.task_name);
        nameView.setText(taskName.getTaskName());
        countView = (TextView) convertView.findViewById(R.id.count_task);
        countView.setText(String.valueOf(taskName.getTaskNameId()));


      return convertView;
    }


    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            int pos = Integer.valueOf(view.getTag().toString());
            Log.d(LOG, getItem(pos).getTaskName());
            Log.d(LOG, String.valueOf(getItem(pos).getTaskNameId()));
            selectedItemText = getItem(pos).getTaskName();
            selectedItemId = getItem(pos).getTaskNameId();
        }
        return false;
    }



    @Override
    public void onClick(View view) {
        Toast.makeText(context, "Click", Toast.LENGTH_SHORT).show();
    }
}

Это класс адаптера, для GridView!

В фрагменте я устанавливаю GridView контекстное меню для удаления элемента ! Именно для определения того,который элемент удалять и служит onTouch(). В фрагмент передается значение элемента на который совершено касание, соответственно если на нем вызывается контекстное меню для удаления - он удаляется!

Мне нужно совершить переход на другое активити после касания на элемент GridView - от для этого и использую onClick().

Не могу понять где я натупил и в чем проблема! Как мне исправить данную проблему ?

Это моя первая практика android и может что-то делаю не правильно, приму любую конструктивно критику и совет!!
Спасибо!!
  • Вопрос задан
  • 373 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Если я правильно понял, то тебе надо избавиться от onTouch(), это не тот способ, которым стоит получать позицию элемента.
Во фрагменте надо сделать (вероятно, это уже есть):
registerForContextMenu(grid);
и, далее, переопределить метод:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    ...
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
    int position = info.position; // Это и есть нужная тебе позиция, сохрани её куда-нибудь и потом воспользуйся для удаления.
    ...
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы