ShamylZakariya / StickyHeaders

Adapter and LayoutManager for Android RecyclerView which enables sticky header positioning.
MIT License
1.4k stars 185 forks source link

IndexOutOfBoundsException #107

Closed wenchaosong closed 5 years ago

wenchaosong commented 5 years ago

when the data is empty, crash. so, the data can not empty? or, how to use it when init without set the code mRecyclerView.setVisibility(View.GONE);?

ShamylZakariya commented 5 years ago

I'll look into this.

wenchaosong commented 5 years ago

ok

ShamylZakariya commented 5 years ago

I'm pretty certain this fixes the issue. I want to do a little more testing before I push a new build. Can you post your adapter code?

wenchaosong commented 5 years ago

I was use the sample, i did not new a adapter, i just change init method and it was appeared

wenchaosong commented 5 years ago
public class AddressBookDemoActivity extends DemoActivity implements RandomUserLoader.OnLoadCallback {

    private static final String TAG = AddressBookDemoActivity.class.getSimpleName();
    AddressBookDemoAdapter adapter = new AddressBookDemoAdapter();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        recyclerView.setLayoutManager(new StickyHeaderLayoutManager());
        recyclerView.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();

        getRandomUserLoader().load(this);
    }

    @Override
    public void onRandomUsersDidLoad(List<Person> randomUsers) {

        recyclerView.post(() -> adapter.setPeople(randomUsers));
    }

    @Override
    public void onRandomUserLoadFailure(final Throwable t) {

        Snackbar snackbar = Snackbar.make(recyclerView, "Unable to load addressbook", Snackbar.LENGTH_LONG);
        snackbar.setAction(R.string.demo_addressbook_load_error_action, v -> showRandomUserLoadError(t.getLocalizedMessage()));
        snackbar.show();
    }

    private void showRandomUserLoadError(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.demo_addressbook_load_error_dialog_title)
                .setMessage(message)
                .setPositiveButton(android.R.string.ok, null)
                .show();
    }

    private RandomUserLoader getRandomUserLoader() {
        return ((StickyHeadersDemoApp) getApplicationContext()).getRandomUserLoader();
    }
}
ShamylZakariya commented 5 years ago

Well, as far as I can tell I've fixed the crash on an empty adapter. I've pushed https://github.com/ShamylZakariya/StickyHeaders/releases/tag/v0.7.11 and it's available for import.