如何知道Clicked项目的y位置在列表视图中关于android中的屏幕

时间:2012-03-20 15:09:47

标签: android listview webview long-press

在我的应用程序中,我将Web视图扩展为列表视图,并将长按click事件设置为Web视图。长按我复制一个项目以显示在列表视图上。如图所示。

我想知道点击的项目位置,以便我可以使重复的视图显示在所点击的项目的正上方,但现在它出现在列表中的第一个项目上。

灰色的项目是重复的项目,我点击了第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 个答案:

答案 0 :(得分:2)

获取视图的y位置: http://developer.android.com/reference/android/view/View.html#getLocationInWindow%28int []%29

它需要一个长度为2的整数数组 和x,和y坐标将存储在该数组对象中,现在使用该对象获取视图位置

private OnItemLongClickListener onlongpressed = new 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 :(得分:1)

我认为您要做的就是将元素插入到适配器在适当位置操作的基础数据结构中。我使用的不是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.
    }
}