标题很清楚。我有这种布局:
_________________
|_______________| <- Toolbar
|___|___|___|___| <- Tablayout
| |
| |
| ViewPager |
| |
|_______________|
工具栏和tablayout都位于AppBarLayout
内,因此我可以使用滚动标记在向上滚动时隐藏工具栏。问题是这只适用于嵌套滚动支持的视图。大多数标签 - 我的意思是,大多数页面 - 是support.v4.NestedScrollView
s,所以这是好的;其他人(并且需要)ListView
s。
从Lollipop开始,我只需将android:nestedScrollingEnabled="true"
添加到列表视图中,工具栏就会在滚动时正确隐藏。
在API&lt; 21上,没有这样的属性,工具栏也无法隐藏。更重要的是,列表中的最后一项是隐藏的,因为CoordinatorLayout
中存在一些测量错误:listview的行为就好像它有工具栏当前占用的空间一样。
解决方案:
切换到RecyclerView
,它支持嵌套滚动:我不能,因为我需要使用只适用于适配器视图的外部库适配器,而且我可以使用t replace(即ParseQueryAdapter
);
扩展ListView
并实现嵌套滚动:似乎很复杂;
扩展ListView
并实施一些解决方法,例如测量内容以避免上一项问题或(和)自定义行为使工具栏隐藏:似乎也很复杂;
使用一些布局技巧:找不到。
任何帮助?
例如,我(绝望地)尝试过:
<android.support.v4.widget.NestedScrollView
android:nestedScrollingEnabled="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</android.support.v4.widget.NestedScrollView>
但是这样ListView
并没有列为match_parent
。我得到一个小高度的小视图,页面的其余部分是空的。
答案 0 :(得分:2)
不幸的是,没有办法让ListView
上的嵌套滚动工作 - 否则它就不需要在API 21中进行修改。
您注意到当前Parse SDK实际上已完全删除ParseQueryAdapter
。鉴于此,使用Parse query APIs directly开始构建您自己的基于RecyclerView
的适配器可能是有意义的。
答案 1 :(得分:1)
针对特定var ids = [62519, 1, 2, 3, 2656, 82969, 36201, 82969, 78788, 82969, 97647, 82969, 53745, 54510, 60850, 82969, 29872, 51407, 29347, 105113];
var cnames = {};
for (var i = 0; i < ids.length; i++) {
var nlid = ids[i];
console.log(nlid);
// It should be != not !== according to my knowledge
if (cnames[nlid] != undefined) {
console.log('already present');
}
else {
console.log('not present');
getCname(nlid)
function getCname(nlid) {
sqlcon.query('select name from ss_newsletters where newsletterid=' + nlid + ' limit 1', function (err, rows, fields) {
if (err) {
console.error(err);
}
else {
var x = rows[0].name;
cnames[nlid] = x;
}
});
}
}
}
问题中的问题,
parse.com上的家伙正在处理RecyclerView.Adapter version;
答案 2 :(得分:1)
我实际上是Xamarin
开发者,所以我无法测试这是否适用于这种特殊情况,但我发现an answer which helped me in Xamarin
,所以我要分享它:
我找到了一个出色的解决方案,可以滚动ListView 没有问题:
ListView lv = (ListView)findViewById(R.id.myListView); // your listview inside scrollview lv.setOnTouchListener(new ListView.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // Disallow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: // Allow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(false); break; } // Handle ListView touch events. v.onTouchEvent(event); return true; } });
这样做是禁用ScrollView上的TouchEvents并制作 ListView拦截它们。它很简单,一直有效。
如果这不起作用,请告诉我,我可以删除这个答案。但也许它可以帮助任何人,因为我也发现了这个问题,似乎没有解决方案。