ArrayAdapter - 我做错了什么?

3
我有一个ListActivity,我正在尝试使用自定义ArrayAdapter将其绑定到一组业务对象的数组。
当我在模拟器或真实的Android设备上运行应用程序时,我会在ArrayAdapter的"holder.txtTeam1.setText(info.Team1);"这一行中收到空引用错误。经过一些调试,看起来调用充气布局并没有实际创建子TextView,它只创建了外层TableLayout。
这全部基于我在互联网上找到的教程,并且我已经钻研了差不多一周。有人能告诉我我做错了什么吗?
该活动如下:
    public class BaseballPressActivity extends ListActivity {

    private GameDataAdapter adapter;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        adapter = new GameDataAdapter(this, new GameData[]{new GameData("3:10pm","Team 1","Team 2")});
        this.setListAdapter(adapter);
        }
    }

ArrayAdapter看起来像这样:
public class GameDataAdapter extends ArrayAdapter<GameData> {

Context context;
GameData data[] = null;

public GameDataAdapter(Context context, GameData[] data) {
    super(context,R.layout.listitem_game, R.id.Name1, data);

    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    GameViewHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(R.layout.test , parent, false);

        holder = new GameViewHolder();
        holder.txtTeam1 = (TextView)row.findViewById(R.id.Name1);

        row.setTag(holder);
    }
    else
    {
        holder = (GameViewHolder)row.getTag();
    }

    GameData info = data[position];
    holder.txtTeam1.setText(info.Team1);

    return row;
}

static class GameViewHolder
{
    TextView txtTeam1;
    TextView txtTeam2;
    TextView txtGameTime;
}

}

列表活动项的布局如下:

    <?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView android:text="TextView" android:layout_weight="0" android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="0dp"></TextView>
        <ImageView android:id="@+id/imageView1" android:src="@drawable/icon" android:layout_height="wrap_content" android:layout_weight="0" android:layout_width="0dp"></ImageView>
        <LinearLayout android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="0dp">
            <TextView android:text="TextView" android:id="@+id/Name1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
            <TextView android:text="TextView" android:id="@+id/Name2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        </LinearLayout>
        <ImageView android:id="@+id/imageView2" android:src="@drawable/icon" android:layout_height="wrap_content" android:layout_weight="0" android:layout_width="0dp"></ImageView>
    </TableRow>
    </TableLayout>

Yashwanth Kumar得到了答案的功劳,Dan S因为给我提供了更简单的解决方案并向我展示了一些我不知道的东西而获得了点赞。谢谢大家。 - Bradley Uffner
2个回答

2

好的,我认为问题出在这里。

 row = inflater.inflate(R.layout.test , parent, false);

将false改为true,我认为你需要将视图附加到其父级。

如果这不起作用,请尝试以下方法。

 row = inflater.inflate(R.layout.test , null);

1

这是我之前尝试过的,但看起来SimpleAdapter只允许我将业务对象的一个属性绑定到布局中的一个视图。当这个完全工作时,我实际上需要将LayoutItem中的5个视图绑定到业务对象的不同字段。我会更新问题以反映这一点。 - Bradley Uffner
使用构造函数中的fromto参数,您可以将任意数量的数据项绑定到视图。 - Dan S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接