У меня есть программа Android с ScrollView, которая будет правильно выполнять автоматическую прокрутку при вызове метода scrollBy на эмуляторе на моем компьютере, но не будет делать это на моем телефоне Android.
Вот код:
public class RecordGameActivity3 extends Activity {
ScrollView myView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recordgame3);
myView = (ScrollView)findViewById(R.id.scrollView1);
}
public void addPlayer(View v)
{
//Removed non-related code
myView.smoothScrollBy(0, 50);
}
}
Кроме того, обычный метод scrollBy не работает или метод scrollTo (хотя я могу просто не использовать его правильно, поскольку он также не работает на компьютере). У кого-нибудь есть идеи, что может быть не так?
EDIT:
Моя проблема, как показал ответ Даррелла, заключалась в том, что я вызывал свой метод smoothScrollBy из функции, в которой я вносил изменения в макет, которые делали область прокрутки достаточно большой, чтобы ее можно было прокручивать. Очевидно, к тому времени, когда я вызывал ее в функции, изменения фактически не применялись, и поэтому их нельзя было прокручивать.
Таким образом, я изменил код, используя его совет:
public class RecordGameActivity3 extends Activity {
ScrollView myView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recordgame3);
myView = (ScrollView)findViewById(R.id.scrollView1);
// New code that listens for a change in the scrollView and then calls the scrollBy method.
ViewTreeObserver vto = myView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
myView.smoothScrollBy(0, 100);
}});
}
public void addPlayer(View v)
{
//Code that is called on an onClick listener that adds things to the ScrollView making it scrollable.
}
}