Как узнать положение y у Clicked Itemin в виде списка относительно экрана в Android - PullRequest
0 голосов
/ 20 марта 2012

В моем приложении я надуваю веб-представление в виде списка и установил событие длинного нажатия на веб-представление.При длительном нажатии я дублирую элемент для отображения в списке.как показано на изображении.

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

элемент в сером цвете - дублированный элемент, я нажал на 10-й элемент, и он появляется на 1-м элементе.как бы он появился на 10-м элементе? [введите описание изображения здесь] [1]

wv.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                duplicateView.setVisibility(View.VISIBLE);
                Log.d("lvsectionTwo "+lvsectionTwo.getScrollY(),"log");
                WebView wv = (WebView) duplicateView.findViewById(R.id.wv1);
                wv.loadData("item "+position, "text/html", null);
                wv.setBackgroundColor(Color.DKGRAY);

                ![enter image description here][2]



                return true;
            }
        });
        return view;
    }

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Получить y позицию просмотра по: http://developer.android.com/reference/android/view/View.html#getLocationInWindow%28int[]%29

для этого потребуется массив целых чисел длины 2 и координаты x и y будут сохранены в этом объекте массива, теперь используйте этот объект для получения позиции обзора

частный OnItemLongClickListener onlongpressed = новый OnItemLongClickListener () {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View view,
                            int position, long id) {
                    duplicateView = ((LayoutInflater) getBaseContext().getSystemService(
                                    LAYOUT_INFLATER_SERVICE)).inflate(R.layout.dragview, null);
                    frlayout.addView(duplicateView);
                    int[] dimensions=new int[2];
                    getLocationInWindow (dimensions);
                    FrameLayout.LayoutParams layoutParams = frlayout.getLayoutParams();
                    layoutParams.setMargins(0, dimensions[1]-20, 0, 0);
                    duplicateView.setLayoutParams(layoutParams);
                    duplicateView.setVisibility(View.VISIBLE);
                    WebView wv = (WebView) duplicateView.findViewById(R.id.wv1);
                    wv.setBackgroundColor(Color.DKGRAY);
                    wv.loadData("Item "+position, "text/html", null);
                    return true;
            }
    };
1 голос
/ 20 марта 2012

Я думаю, что все, что вам нужно сделать, это вставить элемент в базовую структуру данных, с которой работает ваш адаптер в соответствующем месте.Вместо OnLongClickListener я бы использовал OnItemLongClickListener, поскольку он дает вам позицию:

getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) {
        // add something to your structure at (position - 1) and refresh your ListView.
    }
}
...