Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:让视图在listview顶部与listview一起滚动_Android_Android Listview_Android Custom View_Android Scroll - Fatal编程技术网

Android 安卓:让视图在listview顶部与listview一起滚动

Android 安卓:让视图在listview顶部与listview一起滚动,android,android-listview,android-custom-view,android-scroll,Android,Android Listview,Android Custom View,Android Scroll,我有一个列表视图,它显然是可滚动的。listview包含一些表单问题。一旦用户提交表单,我们会在listview的顶部添加一个类似于“查看自定义视图”的图章(并阻止用户回答问题,但这并不重要) 戳记应出现在listview的顶部(如屏幕顶部),并以与listview相同的速度滚动,即当滚动时,最初位于其下方的listview项目在屏幕顶部消失时,戳记应消失 您知道如何实现这一点吗?对于顶部屏幕的视图,您可以添加headerview,以便将coustom布局绑定为listview的headerla

我有一个列表视图,它显然是可滚动的。listview包含一些表单问题。一旦用户提交表单,我们会在listview的顶部添加一个类似于“查看自定义视图”的图章(并阻止用户回答问题,但这并不重要)

戳记应出现在listview的顶部(如屏幕顶部),并以与listview相同的速度滚动,即当滚动时,最初位于其下方的listview项目在屏幕顶部消失时,戳记应消失


您知道如何实现这一点吗?

对于顶部屏幕的视图,您可以添加headerview,以便将coustom布局绑定为listview的headerlayout..因此您可以使用与listview相同的滚动

View headerview = ((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.track_footer_view, null, false);
    listview.addHeaderView(headerview);

我找到了解决办法。不确定它是否太优雅,但它能工作,所以除非有人想出更好的方法,否则我会离开它

我想与列表一起滚动的视图是一个自定义视图,它必须了解列表视图。因此,我在其上实现了一个setListView(ListView ListView)方法:

private int scrollY; //1
private Map<Integer, Integer> listViewItemHeights = new Hashtable<>();
public void setListView(final ListView listView) {
    listView.setOnScrollListener(new OnScrollListener() {  //2
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {} //3

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4
            View c = listView.getChildAt(0);
            if (c != null) {
                int oldScrollY = scrollY;
                scrollY = -c.getTop();

                listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight());
                for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) {
                    if (listViewItemHeights.get(i) != null)
                        scrollY += listViewItemHeights.get(i);
                }
                scrollBy(0, scrollY - oldScrollY);
            }
        }
    });
}
private int滚动//1.
私有映射listViewItemHeights=新哈希表();
公共无效setListView(最终ListView ListView){
setOnScrollListener(新的OnScrollListener(){//2
@凌驾
public void onScrollStateChanged(AbsListView视图,int scrollState){}//3
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,int visibleItemCount,int totalItemCount){//4
视图c=listView.getChildAt(0);
如果(c!=null){
int oldScrollY=scrollY;
scrollY=-c.getTop();
listViewItemHeights.put(listView.getFirstVisiblePosition(),c.getHeights());
对于(int i=0;i
注释1:这是一个变量,可以让我跟踪当前的滚动位置

注释2:设置一个新的滚动监听器,让我的自定义视图知道列表

第3条意见:在这种情况下不需要执行这一点


评论四:这就是魔法发生的地方。注意,在最后我通过scrollY-oldScrollY滚动我的视图,让我先从这个位开始。oldScrollY是保留的滚动位置,scrollY是新位置。我需要滚动它们之间的差异。关于scrollY的计算方法,请参考我的回答:,这是在列表视图中计算滚动位置的方法。

您好,谢谢您的回答。我需要将listview中的顶行打上“戳记”,因此我无法将该视图放在标题中。您可以通过创建两个自定义布局和第一个位置来实现。为所有其他位置绑定第一个布局和第二个布局。。因此,你必须在数组中添加必要的值,你在BaseAdapter中绑定的值。问题是,我不需要在第一个位置的顶部显示戳记。在我的列表中,行的高度可能不同,并且戳记可能会跨越前三行左右。@SanketKachhela感谢您的回答,我想在我的listview顶部添加一个imageView和标题(textView),并且可以使用listview滚动。我在我的listview的标题中添加了这两个元素,效果很好,你救了我一天。如何通过XML做同样的事情?