Android Как получить позицию выбранного элемента из gridview без использования onclicklistner, используя вместо этого ontouchlistner - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть gridview, мне нужно что-то делать на motioneven.action_down и что-то делать для motioneven.action_up ... использование onclicklistener - это здорово, но не дает мне этой необходимой функциональности.

Есть ли способ легко вызвать вид сетки и получить выбранный элемент в сенсорном слое?У меня был ограниченный успех в создании собственной реализации.Трудно получить правильные значения x, y, потому что, если я назову ребенка, он даст мне x и y относительно ребенка, поэтому кнопка будет от 0,0 до 48,48, но она не скажет вам фактическое местоположение на экране.относительно вида сетки или самого экрана.

это то, что я делал, это частично работает до сих пор.

Grid.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    int x = (int)event.getX();
                    int y = (int)event.getY();
                    int position = 0;
                    int childCount = Grid.getChildCount();

                    Message msg = new Message();
                    Rect ButtonRect = new Rect();
                    Grid.getChildAt(0).getDrawingRect(ButtonRect); 
                    int InitialLeft = ButtonRect.left + 10;
                    ButtonRect.offsetTo(InitialLeft, ButtonRect.top);
                    //

                    while(position < childCount){
                        if(ButtonRect.contains(x,y)){break;}
                        if(ButtonRect.right + ButtonRect.width() > Grid.getWidth())
                        { ButtonRect.offsetTo(InitialLeft, ButtonRect.bottom);}
                        position++;
                        ButtonRect.offsetTo(ButtonRect.right, ButtonRect.top);

                    }

                    msg.what = position;
                    msg.arg1 = ButtonRect.bottom;
                    msg.arg2 = y;
                    cHandler.sendMessage(msg);
                }// end if action up

                if (event.getAction() == MotionEvent.ACTION_UP) {
                }
                return false;
            }
        });

1 Ответ

0 голосов
/ 10 февраля 2011

используйте onItemClickListener, чтобы получить определенный элемент вида сетки.

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub

        // here arg2 is the position of the grid view item on which you have clicked on

    }

Попробуй. У меня это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...