好像我仍然无法掌握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