Gle*_*enn 156 android listview scrollview
对于我的部分应用,会向用户显示一个名称列表,并要求他们按照自己的意愿对其进行分组.
(注意,ListView代码是从Android视图教程中逐字复制的.我还没有根据我的需要对其进行定制,我只想弄清楚如何使其工作.)
基本布局是一个LinearLayout,包含一个ScrollView(在下面的代码中称为"groupsScrollView"),包含一个RelativeLayout.我有一些按钮和文本,然后是我的ListView,它显示了名称列表.所有这一切都高于可见屏幕区域,因此允许用户垂直滚动以查看所有内容.
这一切都很漂亮,除非页面加载时总是预先滚动到我的ListView顶部 - 在页面中间.我创建的文本和按钮告诉用户该做什么是不可见的.
我可以抓住屏幕并向上滚动,这很好用,但我希望屏幕加载已经滚动到顶部.用户不必向上滚动以查看新加载页面的顶部.但我尝试以编程方式滚动到屏幕顶部的所有内容都失败了.
这是我的onCreate方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.groups);
mainScrollView = (ScrollView)findViewById(R.id.groupsScrollView);
//get the Bundle out of the Intent...
Bundle extras = getIntent().getExtras();
mNames = extras.getStringArray("mNames");
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, mNames));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
//This is the line I'm having issues with
mainScrollView.pageScroll(View.FOCUS_UP);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
行"mainScrollView.pageScroll(View.FOCUS_UP);是问题.它不会导致错误,但似乎没有做任何事情.我尝试过scrollTo(0,0),scrollDirection(View.FOCUS_UP) ),以及我能想到的一切.
由于我没有得到错误,我必须假设这些滚动命令实际上正在工作,但它们滚动到ListView的顶部,而不是包含它的ScrollView或RelativeLayout的顶部.这似乎是由谷歌自己对scrollTo(int x,int y)方法的描述所证实的,他们说"这个版本也会将滚动限制在我们孩子的范围内".
因此,为了使问题更长,我如何在ScrollView中包含的屏幕上加载一堆视图,然后以编程方式将整个视图滚动到页面顶部,以便用户可以与之交互?
谢谢!
roo*_*tek 255
尝试
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
Run Code Online (Sandbox Code Playgroud)
它应该工作.
Moh*_*fez 172
有同样的问题,可能是某种bug.
即使是fullScroll(ScrollView.FOCUS_UP)其他答案也没有奏效.
只有对我有用的东西是在scroll_view.smoothScrollTo(0,0)显示对话框后立即调用.
小智 97
我有同样的问题,这解决了它.希望它能帮到你.
listView.setFocusable(false);
Run Code Online (Sandbox Code Playgroud)
Moh*_*ran 51
scrollViewObject.fullScroll(ScrollView.FOCUS_UP)这工作正常,但只有这一行的问题是,当在scrollViewObject中填充数据时,已立即调用.您必须等待几毫秒才能填充数据.试试这段代码:
scrollViewObject.postDelayed(new Runnable() {
@Override
public void run() {
scroll.fullScroll(ScrollView.FOCUS_UP);
}
}, 600);
Run Code Online (Sandbox Code Playgroud)
要么
scrollViewObject.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
scrollViewObject.getViewTreeObserver().removeOnGlobalLayoutListener(this);
scrollViewObject.fullScroll(View.FOCUS_UP);
}
});
Run Code Online (Sandbox Code Playgroud)
Pel*_*nes 33
所有这些有效解决方案的主要问题是,当您还没有在屏幕上绘制时,您正试图向上移动滚动条.
您需要等到滚动视图显示在屏幕上,然后使用任何这些解决方案将其移动到上方.这是一个比postdelay更好的解决方案,因为你不介意延迟.
// Wait until my scrollView is ready
scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Ready, move up
scrollView.fullScroll(View.FOCUS_UP);
}
});
Run Code Online (Sandbox Code Playgroud)
Com*_*ode 30
ScrollView scroll = (ScrollView) findViewById(R.id.addresses_scroll);
scroll.setFocusableInTouchMode(true);
scroll.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
Run Code Online (Sandbox Code Playgroud)
Mla*_*jac 20
final ScrollView scrollview = (ScrollView)findViewById(R.id.selected_place_layout_scrollview);
scrollview.post(new Runnable() {
public void run() {
scrollview.scrollTo(0, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
tra*_*per 10
runOnUiThread( new Runnable(){
@Override
public void run(){
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Kotlin 中解决了我的问题,如下所示:
scrollview.isFocusableInTouchMode = true
scrollview.fullScroll(View.FOCUS_UP)
scrollview.smoothScrollTo(0,0)
Run Code Online (Sandbox Code Playgroud)
您还可以创建这样的扩展:
ScrollView.moveToTop()
{
this.isFocusableInTouchMode = true
this.fullScroll(View.FOCUS_UP)
this.smoothScrollTo(0,0)
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
scrollView.moveToTop()
Run Code Online (Sandbox Code Playgroud)
这对我有用
scroll_view.smoothScrollTo(0,0); // scroll to top of screen
Run Code Online (Sandbox Code Playgroud)
这是scrollview的强制滚动:
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.scrollTo(0, 0);
scrollView.pageScroll(View.FOCUS_UP);
scrollView.smoothScrollTo(0,0);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146669 次 |
| 最近记录: |