为什么我在尝试引用 Textview 时得到 NPE
Why am i getting an NPE when i trying to reference a Textview
我正在 android studio 中编写一个时间表应用程序,我希望将星期几的第一个字母作为图像视图,并将实际日期存储在一个字符串中以显示在旁边图片视图。我正在为此使用 cardviews。不幸的是,我收到一个 NPE“尝试在第 103 行的空对象引用上调用虚拟方法 'void.android.widget.textview.setText(java.lang.charsequence)',该引用具有 holder.tvWeek.setText(week[position]); .
这是我的代码
public class weekActivity extends AppCompatActivity {
private Toolbar toolbar;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_week);
setUIViews();
initToolbar();
setupListView();
}
private void setUIViews() {
toolbar = findViewById(R.id.ToolBarWeek);
listView = findViewById(R.id.tvWeek);
}
private void initToolbar() {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("WEEK");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void setupListView() {
String[] week = getResources().getStringArray(R.array.week);
WeekAdapter adapter = new WeekAdapter(this, R.layout.activity_week_single_item, week);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
switch (i) {
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default:
break;
}
}
});
}
public class WeekAdapter extends ArrayAdapter {
private int resource;
private LayoutInflater layoutInflater;
private String[] week = new String[]{};
public WeekAdapter(Context context, int resource, String[] objects) {
super(context, resource, objects);
this.resource = resource;
this.week = objects;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder;
if (convertView == null) {
holder = new viewHolder();
convertView = layoutInflater.inflate(resource, null);
holder.ivLogo = (LetterImageView) convertView.findViewById(R.id.ivLetter);
holder.tvWeek = (TextView) convertView.findViewById(R.id.tvMain);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
holder.ivLogo.setOval(true);
holder.ivLogo.setLetter(week[position].charAt(0));
holder.tvWeek.setText(week[position]);
return convertView;
}
class viewHolder {
private LetterImageView ivLogo;
private TextView tvWeek;
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
onBackPressed();
}
}
return super.onOptionsItemSelected(item);
}
}
在
holder.tvWeek = (TextView);
convertView.findViewById(R.id.tvMain);
将 tvMain 更改为 tvWeek
我正在 android studio 中编写一个时间表应用程序,我希望将星期几的第一个字母作为图像视图,并将实际日期存储在一个字符串中以显示在旁边图片视图。我正在为此使用 cardviews。不幸的是,我收到一个 NPE“尝试在第 103 行的空对象引用上调用虚拟方法 'void.android.widget.textview.setText(java.lang.charsequence)',该引用具有 holder.tvWeek.setText(week[position]); . 这是我的代码
public class weekActivity extends AppCompatActivity {
private Toolbar toolbar;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_week);
setUIViews();
initToolbar();
setupListView();
}
private void setUIViews() {
toolbar = findViewById(R.id.ToolBarWeek);
listView = findViewById(R.id.tvWeek);
}
private void initToolbar() {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("WEEK");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void setupListView() {
String[] week = getResources().getStringArray(R.array.week);
WeekAdapter adapter = new WeekAdapter(this, R.layout.activity_week_single_item, week);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
switch (i) {
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default:
break;
}
}
});
}
public class WeekAdapter extends ArrayAdapter {
private int resource;
private LayoutInflater layoutInflater;
private String[] week = new String[]{};
public WeekAdapter(Context context, int resource, String[] objects) {
super(context, resource, objects);
this.resource = resource;
this.week = objects;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder;
if (convertView == null) {
holder = new viewHolder();
convertView = layoutInflater.inflate(resource, null);
holder.ivLogo = (LetterImageView) convertView.findViewById(R.id.ivLetter);
holder.tvWeek = (TextView) convertView.findViewById(R.id.tvMain);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
holder.ivLogo.setOval(true);
holder.ivLogo.setLetter(week[position].charAt(0));
holder.tvWeek.setText(week[position]);
return convertView;
}
class viewHolder {
private LetterImageView ivLogo;
private TextView tvWeek;
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
onBackPressed();
}
}
return super.onOptionsItemSelected(item);
}
}
在
holder.tvWeek = (TextView);
convertView.findViewById(R.id.tvMain);
将 tvMain 更改为 tvWeek