我在适配器中收到空指针异常



我正在使用列表视图来膨胀导航菜单。我在以下情况下收到上述错误 启动主要活动。我正在共享适配器和主要活动的代码。

public class DrDrawerListAdapter extends BaseAdapter {
Activity activity;
int[] imageId;
private LayoutInflater inflater = null;
ArrayList<String> titles;
public DrDrawerListAdapter(Activity activity, ArrayList<String> titles, int[] icons){
this.titles= titles;
this.activity = activity;
this.imageId = icons;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return titles.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
View view = inflater.inflate(R.layout.dr_drawer_item, null);
holder.iconView = view.findViewById(R.id.im_icon);
holder.titleView = view.findViewById(R.id.tv_title);
holder.titleView.setText(titles.get(position));
Glide.with(activity.getApplicationContext()).load(imageId[position]).into(holder.iconView);
return view;
}
public class Holder{
ImageView iconView;
TextView titleView;
}

} 这是我的主要活动文件 package com.example.azim.qphew.Dr.view.uiactivity;

进口黄油刀。宾德维; 进口黄油刀。黄油刀;

public class DrMainActivity extensions AppCompatActivity implements View.OnClickListener { private static final String TAG = DrMainActivity.class.getSimpleName((;

@BindView(R.id.drawer_layout) DrawerLayout drawerLayout;
//NavigationView navigationView;
@BindView(R.id.toolbar) Toolbar toolbar;
@BindView(R.id.lv_drawer) ListView listView;
@BindView(R.id.dr_profile) ImageButton profileButton;
@BindView(R.id.dr_schedule) ImageButton scheduleButton;
@BindView(R.id.live) ImageButton liveButton;
@BindView(R.id.dr_message) ImageButton messageButton;
@BindView(R.id.dr_logout) ImageButton logoutButton;
private ActionBar actionBar;
ArrayList<String> nav_items;
int[] icons = {R.drawable.time, R.drawable.appointment_history, R.drawable.live_appointment, R.drawable.medicine_reminder,
R.drawable.video, R.drawable.blog, R.drawable.faq, R.drawable.live_appointment};
DrDrawerListAdapter listAdapter;
ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dr_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.app_bar_color)));
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.menu);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DashboardFragment());
ft.commit();
setDrawer();
init();
initClickListener();
}
private void setDrawer(){
if (toggle == null){
toggle = new ActionBarDrawerToggle(DrMainActivity.this,drawerLayout,R.string.open, R.string.close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
}
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
}
};
drawerLayout.addDrawerListener(toggle);
}
toggle.syncState();
listAdapter = new DrDrawerListAdapter(DrMainActivity.this, nav_items, icons);
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new DrDrawerItemClickListener());
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.live:
setLiveQueue();
break;
case R.id.dr_profile:
setProfile();
break;
case R.id.dr_schedule:
setSchedule();
break;
case R.id.dr_message:
setMessage();
break;
case R.id.dr_logout:
setLogout();
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (toggle.onOptionsItemSelected(item)){
return true;
}switch (item.getItemId()){
default:
return super.onOptionsItemSelected(item);
}
}
private class DrDrawerItemClickListener implements ListView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
private void selectItem(int position){
switch (position){
case 0:
setDashBoard();
drawerLayout.closeDrawers();
break;
case 1:
setAppointment();
drawerLayout.closeDrawers();
break;
case 2:
setLiveQueue();
drawerLayout.closeDrawers();
break;
case 3:
setMessage();
drawerLayout.closeDrawers();
break;
case 4:
setVideos();
drawerLayout.closeDrawers();
break;
case 5:
setBlog();
drawerLayout.closeDrawers();
break;
}
}
}
private void initClickListener(){
profileButton.setOnClickListener(this);
scheduleButton.setOnClickListener(this);
liveButton.setOnClickListener(this);
messageButton.setOnClickListener(this);
logoutButton.setOnClickListener(this);
}
private void init(){
nav_items = new ArrayList<>();
nav_items.add("My Account");
nav_items.add("Search");
nav_items.add("Live Appointmet");
nav_items.add("My Appointments");
nav_items.add("Upgrade to Premium");
nav_items.add("FAQ");
nav_items.add("Vedios");
nav_items.add("Blog");
//icons = getResources().getIntArray(R.array.dr_drawer_icons);
}
private void setDashBoard(){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DashboardFragment());
ft.addToBackStack(null);
ft.commit();
}
private void setAppointment(){}
private void setProfile(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.frame_main, new DrProfileFragment());
ft.addToBackStack(null);
ft.commit();
}
private void setLiveQueue(){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DrLiveQueueFragment());
ft.addToBackStack(null);
ft.commit();
}
private void setVideos(){}
private void setMessage(){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DrMessageFragment());
ft.addToBackStack(null);
ft.commit();
}
private void setLogout(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.frame_main, new DrLogoutFragment());
ft.addToBackStack(null);
ft.commit();
}
private void setBlog(){}
private void setFaq(){}
private void setContactUs(){}

private void setSchedule() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DrScheduleFragment());
ft.addToBackStack(null);
ft.commit();
}

}

你应该在调用setDrawer方法之前初始化你的数组

使用 setDrawer 更改 init(( 订单行

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dr_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new  ColorDrawable(getResources().getColor(R.color.app_bar_color)));
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.menu);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DashboardFragment());
ft.commit();
init();
setDrawer();
initClickListener();
}
Call init() before setDrawer method.Before initialising the arraylist you are setting adapter with null 
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dr_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new 
ColorDrawable(getResources().getColor(R.color.app_bar_color)));
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.menu);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_main, new DashboardFragment());
ft.commit();
init();
setDrawer();
initClickListener();

最新更新