Untuk bagian dari aplikasi saya, pengguna disajikan dengan daftar nama dan diminta untuk mengelompokkannya sesuai keinginan mereka.
(Catatan, kode ListView disalin kata demi kata dari tutorial Android Views. Saya belum menyesuaikannya dengan kebutuhan saya, saya hanya mencoba mencari cara untuk membuat ini berfungsi.)
Layout dasar adalah LinearLayout, yang berisi ScrollView (disebut "groupsScrollView" dalam kode di bawah), yang berisi RelativeLayout. Saya memiliki beberapa tombol dan teks, dan kemudian ListView saya di bawahnya, yang menampilkan daftar nama. Semua ini lebih tinggi daripada area layar yang terlihat, sehingga pengguna diizinkan untuk menggulir secara vertikal untuk melihat semuanya.
Ini semua bekerja dengan indah, kecuali ketika halaman memuatnya selalu pra-gulir ke bagian atas ListView saya - di tengah halaman. Teks dan tombol yang saya buat yang memberi tahu pengguna apa yang harus dilakukan tidak terlihat.
Saya dapat mengambil layar dan menggulir ke atas, yang berfungsi dengan baik, tapi saya ingin layar memuat yang sudah digulir ke atas. Pengguna tidak perlu menggulir ke atas untuk melihat bagian atas halaman yang baru dimuat. Tetapi semua yang saya coba gulir secara terprogram ke bagian atas layar gagal.
Inilah metode onCreate saya:
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();
}
});
}
Baris "mainScrollView.pageScroll (View.FOCUS_UP); adalah masalahnya. Itu tidak menyebabkan kesalahan, tetapi sepertinya tidak melakukan apa-apa. Saya sudah mencoba scrollTo (0,0), scrollDirection (View.FOCUS_UP ), dan segala sesuatu yang dapat saya pikirkan.
Karena saya tidak mendapatkan kesalahan, saya harus berasumsi bahwa perintah-perintah gulir ini benar-benar berfungsi, tetapi mereka menggulir ke bagian atas ListView, daripada bagian atas ScrollView atau RelativeLayout yang berisi itu. Ini tampaknya dikonfirmasi oleh deskripsi Google sendiri tentang metode scrollTo (int x, int y) di mana mereka mengatakan "Versi ini juga menjepit pengguliran ke batas-batas anak kita.".
Jadi untuk membuat pertanyaan panjang lebih lama, bagaimana cara memuat banyak tampilan di layar yang terdapat di dalam ScrollView, dan kemudian secara program gulir semuanya ke bagian atas halaman sehingga pengguna dapat berinteraksi dengannya?
Terima kasih!
sumber
Punya masalah yang sama, mungkin semacam bug.
Bahkan
fullScroll(ScrollView.FOCUS_UP)
dari jawaban yang lain tidak berhasil.Satu-satunya hal yang berhasil bagi saya adalah menelepon
scroll_view.smoothScrollTo(0,0)
tepat setelah dialog ditampilkan.sumber
fullScroll()
di atas dalam menjaga item yang dipilih tetap dipilih setelah pindah. DenganfullScroll()
, item pertama dalam scrollview terpilih kembali setiap kali dalam kasus saya, terlepas dari item yang dipilih sebelum scroll bergerak ke atas.Saya memiliki masalah yang sama dan ini memperbaikinya. Semoga ini bisa membantu Anda.
sumber
scrollViewObject.fullScroll(ScrollView.FOCUS_UP)
ini berfungsi dengan baik, tetapi hanya masalah dengan baris ini adalah bahwa, ketika data terisi dalam scrollViewObject, telah dipanggil segera. Anda harus menunggu beberapa milidetik hingga data terisi. Coba kode ini:ATAU
sumber
Masalah utama untuk semua solusi yang valid ini adalah bahwa Anda mencoba untuk naik ke atas ketika tidak digambar di layar.
Anda harus menunggu hingga tampilan gulir muncul di layar, lalu pindahkan ke atas dengan salah satu solusi ini. Ini adalah solusi yang lebih baik daripada postdelay, karena Anda tidak keberatan dengan penundaan itu.
sumber
onGlobalLayout
pemanggilan metodescrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Sangat mudah
sumber
onCreate()
.Saya menghadapi Masalah yang Sama Ketika saya menggunakan Scrollview di dalam View Flipper atau Dialog, case tersebut
scrollViewObject.fullScroll(ScrollView.FOCUS_UP)
mengembalikan false sehingga casescrollViewObject.smoothScrollTo(0, 0)
berfungsi untuk sayaGulir Fokus Atas
sumber
sumber
sumber
Ini berhasil untuk saya
sumber
Ini adalah scroll paksa untuk scrollview :
sumber
sumber
Saya memperbaiki masalah saya di Kotlin seperti ini:
sumber
sumber