O'tilganlik vaqtida Android ro'yxatida qo'shimcha joy ajratiladi

Listli ko'rishda tekis aylantirish bilan g'alati harakatlarni boshdan kechirdim. Menda 30 ta maqola bor. Men qaytib silkitganda

listview.smoothScrollToPositionFromTop(29, 0);

ekranning oxirida ba'zi qo'shimcha joylar bo'ladi. Aslida ro'yxatni biroz yuqoriga ko'taradi. Rasm quyida ko'rsatilgan. Lekin qo'l bilan aylantiradigan bo'lsak, bo'sh joy qolmaydi. Ushbu xatti-harakatni hal qilish uchun nima qilish mumkin?

Image 1

Mana mening tartibim:

<?xml version="1.0" encoding="utf-8"?>





6
tartibda: android: padding = "0px" android: margin = "0px"
qo'shib qo'ydi muallif Zoe, manba
Faqat listview.smoothScrollToPositionFromTop o'chirish (29, 0);
qo'shib qo'ydi muallif Jaimin Modi, manba
Faqat RecyclerView ga o'ting. RecyclerView bilan bir xil narsalarni amalga oshirdim.
qo'shib qo'ydi muallif Moinkhan, manba
@JaiminModi Men qasddan 29-bandga silliq o'tishni xohlayman.
qo'shib qo'ydi muallif Alock Leo, manba
@LunarWatcher Muammo hali nol to'ldirish va margin bilan chiqadi
qo'shib qo'ydi muallif Alock Leo, manba
Salom, menda shu muammo bor.
qo'shib qo'ydi muallif SUcpinar, manba

7 javoblar

Aytganingizdek, bu Android-ning muammosi. O'tkazish uchun animatsiyaning bir qismi bo'lib tuyuladi, animatsiyani to'ldirmasdan oldin "qoshilgan" ko'rinadi. SwipeToRefresh bilan shunga o'xshash tajribaga ega bo'ldim, u erda yangilanish indikatori yangilab bo'lgandan so'ng butunlay yo'qoladi.

Yaxshiyamki, siz animatsiyani o'chirib, vaqtinchalik hal qilishingiz mumkin

    listView.setOverScrollMode(View.OVER_SCROLL_NEVER);

Afsuski, bu qo'lda aylansa ham animatsiyani yo'qotadi. Agar u bilan yashasangiz, bu sizning muammoingizni tuzatadi deb o'ylayman.

AbsListView # setOverScrollMode (int)

EDIT: (after original answer was accepted)

Men atrofimdagi boshqa ishlarni topdim. Bu esa, aylantirish animatsiyasini saqlab qoladi. Afsuski, yana bir kamchilik bor. Agar foydalanuvchi boshqa biror narsa qilishdan oldin avtomatik ravishda o'tsa, pastdagi chegara muammosi mavjud. Agar foydalanuvchi qo'lda pastga 1-ga o'tsa, u holda hech qanday muammo bo'lmaydi. Agar foydalanuvchi avtomatik tarzda o'tsa va chegara oladi, keyin qo'lda aylanadi, muammo bo'lmaydi. Shunday qilib, muqobil usul bu erda.

    Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.invisible_footer, null);
    listView.setOverscrollFooter(drawable);

Drawable papkasida "invisible_footer.xml"



    <!-- a horizontal line -->
    


ListView.html # setOverscrollHeader()

Bu tanlovga imkon beradi:

  1. O'tkazish animatsiyasini yo'qotish
  2. Animatsiyani saqlang, lekin foydalanuvchi pastki chegarani 1 marta ko'rishni xavf qiluvchi
3
qo'shib qo'ydi

Men amalga oshirdim. lekin dastlabki vaqtda birinchi navbatda paddingni pastki qismida ushlab turadi, lekin ikkinchi marta ishlayotgani yaxshi.

    <?xml version="1.0" encoding="utf-8"?>




KOD:

public class ListAct extends AppCompatActivity {
ListView l;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    String str[] = new String[50];
    for (int i = 0; i < 50; i++) {
        str[i] = "poistion" + i;
    }
    ArrayAdapter adpt = new ArrayAdapter(ListAct.this, android.R.layout.simple_dropdown_item_1line, str);
    l = (ListView) findViewById(R.id.listTemp);
    l.setAdapter(adpt);

    l.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            l.smoothScrollToPositionFromTop(29, 0);
        }
    });
}
}
1
qo'shib qo'ydi
@JaiminModi javobingizni tahrirlashingiz kerak. Buni tuzganingizning o'rniga, qanday qilib yozing. Bu sizning original kodingizdan nimasi bilan farq qiladi?
qo'shib qo'ydi muallif Zoe, manba
albatta .. tez orada tahrirlash
qo'shib qo'ydi muallif Jaimin Modi, manba
Muammo faqat birinchi marta .. yuqoridagi kod bilan.
qo'shib qo'ydi muallif Jaimin Modi, manba
Bu android yoki listviewning odatiy xatti bo'lishi mumkin deb o'ylayman.
qo'shib qo'ydi muallif Jaimin Modi, manba
Go'sht, hozir men 30 ta mahsulotni olganman va men bilan bir xil masala.
qo'shib qo'ydi muallif Jaimin Modi, manba
Men Android-ning muammosi deb o'ylayman, ammo bu haqda hech qanday ochiq yoki yopiq masala topilmadi.
qo'shib qo'ydi muallif Alock Leo, manba

ListView-ning balandligini match_parent o'rniga wrap_content -ga o'rnatishga harakat qildingizmi?

Hatto [ushbu o'quv qo'llanmada] barcha xususiyatlar wrap_content ga o'rnatiladi. Shunday qilib, ListView-ning atributlarini kenglik va balandlik bilan almashtiring:


0
qo'shib qo'ydi
0px da tarkibni va chekka bo'shlig'ini o'rashga harakat qildingizmi?
qo'shib qo'ydi muallif Zoe, manba
Wrap_contentni sinab ko'rdim, lekin hali ham muammolar mavjud.
qo'shib qo'ydi muallif Alock Leo, manba
Ha, men sinab ko'rdim. Afsuski, hali ham xuddi shunday.
qo'shib qo'ydi muallif Alock Leo, manba

RecyclerView ga o'tishga ishonaman. Agar siz ko'chirishni xohlamasangiz. Mana atrofida ishlash. Bu usulni o'zingizning faoliyatingizga qo'shing va uni chaqiring.

private void smoothScrollToTop(final int pos) {
    listView.smoothScrollToPositionFromTop(pos, 0);
    listView.post(new Runnable() {
        @Override
        public void run() {
            listView.smoothScrollToPosition(pos);
        }
    });
}

Bu yaxshi sinovdan o'tgan. men uchun ishladi. Va bu erda chiqdi.

enter image description here

0
qo'shib qo'ydi
@Alock Leo Yo'q, oldin u siljitadi, keyin u sakraydi. Shunday qilib, u to'g'ri siljish kabi ko'rinadi
qo'shib qo'ydi muallif Moinkhan, manba
Er bo'sh bo'shliqlarni boshqaradi, ammo bu yumshoq siljishni emas, balki o'rniga o'tadi.
qo'shib qo'ydi muallif Alock Leo, manba

Buni xml ga harakat qilib ko'ring:


0
qo'shib qo'ydi

  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:layout_behavior="@string/appbar_scrolling_view_behavior/>

OK, shunday harakat qilib ko'ring: app: layout_behavior = "@ string/appbar_scrolling_view_behavior"

0
qo'shib qo'ydi
yoki ota-onangiz tartibidan to'ldirishni olib tashlang.
qo'shib qo'ydi muallif Jaimin Modi, manba
Ilova: layout_behavior bu muammoni hal qilmadi.
qo'shib qo'ydi muallif Alock Leo, manba
Bu mening tartibim bilan bir xil va hech qanday to'ldirishga ega emas
qo'shib qo'ydi muallif Alock Leo, manba
Men javobimni yangiladim. Pls tekshiring
qo'shib qo'ydi muallif Bro, manba

Shu kabi muammoni tasvirlaydigan boshqa havolasi ning boshqa bir maqomi mavjud . O'ylaymanki, ushbu postdagi echim sizning muammoingizni hal qilishi kerak.

0
qo'shib qo'ydi