好像我仍然無法掌握notifydatasetchanged的工作方式。我試圖更新適配器中的變量,但無法成功完成。我試着像下面這樣,也嘗試定義單獨的類Nav Drawer項目,但只是無法做任何事情。更改recyclerview中的數據
基本上,計數應該不時更新,所以我只需要在NavDrawer中進行更新。肯定我有一些誤解notifydatasetchanged如何工作。
我很確定我在過去使用ListView做了一些類似於方法2的事情。唯一不同的是,在這種情況下,我使用了ArrayList,但是我直接在NavDrawerList中存儲數組並將其傳遞給適配器。
方法1種
public class ActivityMain extends AppCompatActivity{
private String[] navMenuTitles;
public int count;
RecyclerView mRecyclerView;
RecyclerView.Adapter mAdapter;
RecyclerView.LayoutManager mLayoutManager;
DrawerLayout mDrawerLayout;
ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
count = 20;
mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
mRecyclerView.setHasFixedSize(true);
mAdapter = new NavDrawerAdapter(navMenuTitles, count);
mRecyclerView.setAdapter(mAdapter);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mDrawerLayout = (DrawerLayout) findViewById(R.id.DrawerLayout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer);
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
public void updateCount(){
count = 10;
mAdapter.notifyDataSetChanged(); // DRAWER STILL SHOWS 20 EVEN IF I CALL THIS FUNCTION
}
}
public class NavDrawerAdapter extends RecyclerView.Adapter<NavDrawerAdapter.ViewHolder> {
private String[] mNavTitles;
private int count;
public NavDrawerAdapter(mNavTitles, mCount){
this.mNavTitles = mNavTitles;
this.count = mCount;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextView counter;
public ViewHolder (View itemView) {
textView = (TextView) itemView.findViewById(R.id.title);
counter = (TextView) itemView.findViewById(R.id.counter);
}
}
@Override
public NavDrawerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.navdrawer_item,parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(NavDrawerAdapter.ViewHolder holder, int position) {
holder.textView.setText(mNavTitles[position]);
holder.counter.setText("" + _count);
}
@Override
public int getItemCount() {
return mNavTitles.length;
}
}
方法2
public class ActivityMain extends AppCompatActivity{
private String[] navMenuTitles;
private NavDrawerList navDrawerList;
RecyclerView mRecyclerView;
RecyclerView.Adapter mAdapter;
RecyclerView.LayoutManager mLayoutManager;
DrawerLayout mDrawerLayout;
ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
mRecyclerView.setHasFixedSize(true);
mAdapter = new NavDrawerAdapter(new NavDrawerList(navMenuTitles, 20));
mRecyclerView.setAdapter(mAdapter);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mDrawerLayout = (DrawerLayout) findViewById(R.id.DrawerLayout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer);
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
public void updateCount(){
navDrawerList.setNavCount(10);
mAdapter.notifyDataSetChanged(); // DRAWER STILL SHOWS 20 EVEN IF I CALL THIS FUNCTION
}
}
public class NavDrawerAdapter extends RecyclerView.Adapter<NavDrawerAdapter.ViewHolder> {
private String[] mNavTitles;
private int count;
public NavDrawerAdapter(mNavTitles, mCount){
this.mNavTitles = navDrawerList.getNavTitles();
this.count = navDrawerList.getNavCount();
}
}
public class NavDrawerList {
private String[] navTitles;
private int navCount;
public NavDrawerList(String[] navTitles, int navCount){
this.navTitles = navTitles;
this.navCount = navCount;
}
public String[] getNavTitles(){
return navTitles;
}
public int getNavCount(){
return navCount;
}
public void setNavCount(int navCount){
this.navCount = navCount;
}
}
您的'updateCount()'只會更新Activity類中的變量,而不是您的Adapter類中的變量。 – hidro