2017-01-16 5 views
1

У меня есть список карт RecyclerView CardViews. Новые карты отображаются в верхней части списка.Android: как я могу вернуться к началу RecyclerView после добавления элемента?

Если в настоящее время представление находится в нижней части списка CardView, и я нажимаю кнопку «Добавить», чтобы создать новый CardView, я хочу, чтобы RecyclerView отображал новый CardView в верхней части списка. В настоящее время, когда новый CardView создан, RecyclerView просто возвращается к предыдущему представлению в нижней части списка.

Я пробовал много вещей, без каких-либо удачи, в том числе:

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); 
+0

Когда вы делаете свиток? –

+0

Я пробовал после «layoutManager». Я также пробовал после «setAdapter». Я также попытался использовать recyclerView после «NotifyItemInserted (0)» в add() адаптера. – AJW

+0

Ваш метод 'add()' находится внутри recyclerview, no? –

ответ

0

Я использую это с " прокрутите вверх ", вы можете попробовать работать с ним:

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

Хорошо, я попробую. – AJW

+0

Не повезло. У меня вообще нет прокрутки. – AJW

1

нравится этот

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

, если это не работает, проверьте, где вы звоните в этом и управления выполняет это утверждение или нет.

+0

Хорошо, я попробую. – AJW

+0

Приложение разбилось с NullPointerException. Ему не понравилась строка «layoutManager.scrollToPositionWithOffset (0, 0);» – AJW

+0

Если у вас есть ссылка layoutmanager, вы можете напрямую вызвать вышеуказанный метод с помощью ссылки layoutmanager – Jayanth

 Смежные вопросы

  • Нет связанных вопросов^_^