Reputation: 1093
I have a recyclerView
and I want to sort the items alphabetically. I have used Collections.sort
to sort the list, but when I try to update the list using notifyDatasetChanged()
it's showing me unreachable statement.
Is this issue related to the scope of the adapter?
Here is my MainActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setToolbar();
mSort = (TextView) findViewById(R.id.sort);
// mFilter = (TextView)findViewById(R.id.filter);
mRecyclerView = (RecyclerView) findViewById(R.id.kictstarterRecycler);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
fetchKickStarter(mRecyclerView);
setClickListner();
}
private void setClickListner() {
mSort.setOnClickListener(this);
//mFilter.setOnClickListener(this);
}
private void setToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
search(searchView);
return true;
}
private void fetchKickStarter(final RecyclerView mRecyclerView) {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<JsonElement> call = apiService.getKickStarter();
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
Log.d("resonse", response.toString());
JsonElement object = response.body();
Type listType = new TypeToken<List<Kickstarter>>() {
}.getType();
mKickStarter = new Gson().fromJson(object.getAsJsonArray(), listType);
mAdapter = new KickstarterAdapter(mKickStarter, R.layout.kickstarter_row_layout, MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) { }
});
}
@Override
public void onClick(View view) {
mSort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
@Override
public int compare(Kickstarter item1, Kickstarter item2) {
return item1.getTitle().compareToIgnoreCase(item2.getTitle());
**mAdapter.notifyDataSetChanged()**;
}
});
}
});
}
I am confused why I am not able to access the mAdapter
.
Upvotes: 3
Views: 2099
Reputation: 2385
@Override
public void onClick(View view) {
mSort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
@Override
public int compare(Kickstarter item1, Kickstarter item2) {
return item1.getTitle().compareToIgnoreCase(item2.getTitle());
}
});
}
});
mAdapter.notifyDataSetChanged();
}
Upvotes: 2
Reputation: 6813
That is , you are calling mAdapter.notifyDataSetChanged()
after return statement.
Return statement will return a value at that point. When returning the value also code execution pattern also routed to value receiving method.
so statement after
return
is unreachable statement.
try this
@Override
public void onClick(View view) {
mSort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Collections.sort(mKickStarter, new Comparator<Kickstarter>() {
@Override
public int compare(Kickstarter item1, Kickstarter item2) {
return item1.getTitle().compareToIgnoreCase(item2.getTitle());
}
});
}
mAdapter.notifyDataSetChanged();
});
}
Upvotes: 1