这个问题已经解决了。发现这是一个简单的错字,我引用了错误的布局文件。
我正在尝试为列表视图创建一个自定义适配器,以便我可以显示一个(不可编辑的)评级栏,其评级值是我的程序从数据库中为菜单中的每个项目获得的评级值。当我运行它时,它崩溃了,我不知道为什么。
这是尝试创建列表视图的方法。SetBogusFoodArray2()
返回在另一个类中定义的菜单项的 ArrayList。这一切都正常工作。
private void setupMenu2(){
ArrayList<MenuItem> menu = setBogusFoodArray2();
MenuAdapter myMenuAdapter = new MenuAdapter(this, menu);
ListView menuList = (ListView) findViewById(R.id.listView1);
menuList.setAdapter(myMenuAdapter);
}
这是我的适配器的定义。
public class MenuAdapter extends BaseAdapter{
private Context context;
private List<MenuItem> myMenu = new ArrayList<MenuItem>();
public MenuAdapter(Context context, ArrayList<MenuItem> menu){
context = context;
myMenu = menu;
}
public int getCount() {
return myMenu.size();
}
public Object getItem(int position) {
return myMenu.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View myView = convertView;
MenuItem myFood = (MenuItem) getItem(position);
if (convertView == null){
LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
myView = inf.inflate(R.layout.hall_list_item, null);
}
TextView name = (TextView) myView.findViewById(R.id.textView1);
TextView hall = (TextView) myView.findViewById(R.id.textView2);
RatingBar rating = (RatingBar) myView.findViewById(R.id.ratingBar1);
name.setText(myFood.myName);
hall.setText(myFood.myHall);
rating.setRating(myFood.myRating);
return myView;
}
}
任何帮助将不胜感激!以下是 logcat 中的前几个错误。如果你想看更多,还有更多的红色!
11-02 18:10:36.284:E/AndroidRuntime(619):致命异常:主要 11-02 18:10:36.284:E/AndroidRuntime(619):java.lang.NullPointerException 11-02 18:10:36.284: E/AndroidRuntime(619): 在 edu.calvin.cs.dininghall4.MenuAdapter.getView(MenuAdapter.java:49) 11-02 18:10:36.284: E/AndroidRuntime(619): 在 android.widget.AbsListView.obtainView (AbsListView.java:2267) 11-02 18:10:36.284: E/AndroidRuntime(619): 在 android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
这是相关的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff444444" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffffff" />
<RatingBar
android:id="@+id/ratingBar1"
android:isIndicator="true"
android:rating = "2.5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
style="?android:attr/ratingBarStyleSmall"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/ratingBar1"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#ffffffff" />
</RelativeLayout>
通过消除和注释代码的过程,问题所在的行是:
name.setText(myFood.myName);
hall.setText(myFood.myHall);
rating.setRating(myFood.myRating);
它适用于注释掉的这些行,但文本只是默认值。我尝试简单地插入值而不是变量,但它仍然崩溃。似乎对这些(setText(“Bacon”)、setBackgroundColor、setAllCaps 等)的任何引用都会导致应用程序崩溃。