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.