Java 自定义列表视图适配器存在NullPointerException错误
我在应用程序中编程以显示word,但我有错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 我知道我的错误,请参阅中的CustomBaseAadpter:Java 自定义列表视图适配器存在NullPointerException错误,java,android,listview,nullpointerexception,android-adapter,Java,Android,Listview,Nullpointerexception,Android Adapter,我在应用程序中编程以显示word,但我有错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 我知道我的错误,请参阅中的CustomBaseAadpter: holder.txtWord.setText(rowItem.getword()) 但我不知道如何修复 CustomBaseAdapter.java public cl
holder.txtWord.setText(rowItem.getword())
但我不知道如何修复
CustomBaseAdapter.java
public class CustomBaseAdapter extends BaseAdapter {
Context context;
private List<item_row_adapter> rowItems;
public CustomBaseAdapter(Context context, List<item_row_adapter> items) {
this.context = context;
this.rowItems = items;
}
private class ViewHolder {
TextView txtWord;
TextView txtMean;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_view, null);
holder = new ViewHolder();
holder.txtWord = (TextView) convertView.findViewById(R.id.word_word);
holder.txtMean = (TextView) convertView.findViewById(R.id.mean_mean);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
item_row_adapter rowItem = (item_row_adapter) getItem(position);
holder.txtWord.setText(rowItem.getword());
holder.txtMean.setText(rowItem.getmean());
return convertView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return rowItems.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return rowItems.indexOf(getItem(position));
}
}
public class item_row_adapter {
private String word ="";
private String mean = "";
public item_row_adapter(String word, String mean) {
this.word = word;
this.mean = mean;
}
public String getmean() {
return mean;
}
public void setmean(String mean) {
this.mean = mean;
}
public String getword() {
return word;
}
public void setword(String word) {
this.word = word;
}
public String tostring() {
return mean + "\n" + word;
}
}
vocab_1_program.java
public class vocab_1_program extends Activity implements OnItemClickListener {
private ListView listview ;
public static final String[] Word_item = new String[] { "Strawberry", "Banana", "Orange", "Mixed" };
public static final String[] Mean_word = new String[] {
"It is an aggregate accessory fruit",
"It is the largest herbaceous flowering plant", "Citrus Fruit", "Mixed Fruits" };
List<item_row_adapter> rowItems;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vocab_1_layout);
rowItems = new ArrayList<item_row_adapter>();
for (int i = 0; i < Word_item.length; i++) {
item_row_adapter item = new item_row_adapter(Word_item[i],
Mean_word[i]);
rowItems.add(item);
}
listview = (ListView) findViewById(R.id.listview_view);
CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems);
listview.setAdapter(adapter);
listView.setOnItemClickListener((android.widget.AdapterView.OnItemClickListener) this);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast toast = Toast.makeText(getApplicationContext(), "Item "
+ (position + 1) + ": " + rowItems.get(position),
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
}
public class vocab_1_程序扩展活动监听器{
私有列表视图列表视图;
公共静态最终字符串[]Word_item=新字符串[]{“草莓”、“香蕉”、“橙色”、“混合”};
公共静态最终字符串[]平均值=新字符串[]{
“它是一种聚合的附属水果”,
“它是最大的草本开花植物”、“柑橘类水果”、“混合水果”};
列出项目;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.vocab_1_布局);
rowItems=新的ArrayList();
for(int i=0;i
word_row.xml
<TextView
android:id="@+id/word_word"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="Header"
android:textColor="@android:color/black" />
<TextView
android:id="@+id/mean_mean"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="Mean" />
vocab_1_layout.xml
<ListView
android:id="@+id/listview_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
您正在为行扩展错误的布局
R.layout.list_view
没有所需的视图。
你是在开玩笑
word_row.xml
在CustomBaseAadpter
的public View getView(int-position,View-convertView,ViewGroup-parent)
下,您正在膨胀没有所需视图元素的xml
方法findViewById()
返回一个与id相对应的视图实例,该视图实例出现在扩展的布局中。
由于您膨胀了错误的布局,并且该布局没有找到视图,这就是medthodfindViewById()
为视图返回null的原因
注意这一行-
holder.txtWord = (TextView) convertView.findViewById(R.id.word_word);
holder.txtMean = (TextView) convertView.findViewById(R.id.mean_mean);
因此这里holder.txtWord=null和holder.txtMean=null
当您设置时,调用实例
holder.txtWord
上的方法setText()
,它会抛出NPE。您得到了错误,因为您在CustomBaseAdapter
中膨胀了错误的布局
您已经膨胀了list\u view.xml
而不是word\u row.xml
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null)
{
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.word_row, null);
holder = new ViewHolder();
holder.txtWord = (TextView) convertView.findViewById(R.id.word_word);
holder.txtMean = (TextView) convertView.findViewById(R.id.mean_mean);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
item_row_adapter rowItem = (item_row_adapter) getItem(position);
holder.txtWord.setText(rowItem.getword());
holder.txtMean.setText(rowItem.getmean());
return convertView;
}
请解释一下further@Farshad您必须在自定义适配器中膨胀
word\u row.xml
,因为word\u-word
和mean\u-mean
这两个视图是在word\u row.xml
中定义的,而不是在list\u-view.xml
@Farshad中定义的。这太快了。只是开玩笑。快乐编码@Farshadi无法接受,为什么我看不到这一部分:D tnx broi犯了一个大错误:你应该在这里获得无名英雄的徽章。