[英]Update RecyclerView items alphabetically
我有一個recyclerView
,我想按字母順序對項目進行排序。 我已經使用Collections.sort
對列表進行排序,但是當我嘗試使用notifyDatasetChanged()
更新列表時,它向我顯示了無法訪問的語句。
這個問題是否與適配器的范圍有關?
這是我的主要活動:
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()**;
}
});
}
});
}
我很困惑為什么我無法訪問mAdapter
。
@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();
}
也就是說,您在 return 語句之后調用mAdapter.notifyDataSetChanged()
。
Return 語句將在該點返回一個值。 當返回值時,代碼執行模式也路由到值接收方法。
所以
return
后的語句是無法訪問的語句。
嘗試這個
@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();
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.