when studio setcolorschemecolors scrolling recyclerview pulltorefresh pullrefresh onrefresh how down android android-recyclerview recycler-adapter

android - studio - swiperefreshlayout setcolorschemecolors



Android: ¿cómo vuelvo a la parte superior de RecyclerView después de agregar el elemento? (2)

Utilizo esto con un botón "desplazarse hacia arriba", puede intentar trabajar con él:

LinearLayoutManager mlayoutManager = (LinearLayoutManager) rv.getLayoutManager(); mlayoutManager.scrollToPositionWithOffset(0, 0);

Tengo una lista RecyclerView de CardViews. Las nuevas CardViews se insertan en la parte superior de la lista.

Si la Vista se encuentra actualmente en la parte inferior de la lista de CardView y hago clic en el botón "Agregar" para crear una nueva Vista de tarjeta, quiero que la Vista de reciclado muestre la nueva Vista de tarjeta en la parte superior de la lista. Actualmente, cuando se crea el nuevo CardView, RecyclerView simplemente vuelve a la Vista anterior en la parte inferior de la lista.

He intentado muchas cosas, sin suerte, incluyendo:

recyclerView.getLayoutManager().scrollToPosition(0); recyclerView.scrollToPosition(0); linearlayoutmanager.scrollToPositionWithOffset(0,0)

Adapter.java

public void add(Contact item) { if (contactList.size()==0) { contactList.clear(); notifyDataSetChanged(); } contactList.add(item); notifyItemInserted(0); } public void addAll(List<Contact> contactList) { for (Contact contact : contactList) { add(contact); } }

Activity.java

... protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EmptyRecyclerView recyclerView = (EmptyRecyclerView)findViewById(R.id.list_recyclerview); recyclerView.setHasFixedSize(true); LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(layoutManager); recyclerView.setEmptyView(findViewById(R.id.empty_view)); contactListAdapter = new ContactListAdapter(this); contactListAdapter.setOnItemClickListener(this); recyclerView.setAdapter(contactListAdapter); @Override protected void onStart() { super.onStart(); loadData(); } void loadData(){ List<Contact> contactList = new ArrayList<>(); Cursor cursor = sqLiteDB.retrieve(); Contact contact; try { if (cursor.getCount() > 0) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { do { contact = new Contact(); contact.setI(cursor.getInt(0)); contact.setC(cursor.getInt(1)); contact.setT(cursor.getString(2)); contact.setN1(cursor.getString(3)); contact.setN2(cursor.getString(4)); contact.setD(cursor.getString(5)); contact.setDt(cursor.getString(6)); contact.setTm(cursor.getLong(7)); // add the item to the top of the List. contactList.add(0, contact); } while (cursor.moveToNext()); } } } finally { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } contactListAdapter.clear(); contactListAdapter.addAll(contactList);


hazlo así

recyclerview.post(new Runnable() { @Override public void run() { LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); layoutManager.scrollToPositionWithOffset(0, 0); } });

si esto no funciona, compruebe dónde está llamando y el control ejecuta esta declaración o no.