适配器中Android getView中的视图上的NullPointerError

时间:2014-09-16 19:45:19

标签: android android-adapter

这里简要说明了我的getView。我的目的并不是强调视图持有人模式,这就是为什么我为什么这个例子不起作用而感到慌乱的原因。我正在研究这个例子来说明为什么视图持有者模式是有用的,以及getViewTypeCount()等。有什么想法吗?

public View getView(int position, View convertView, ViewGroup parent) {
    View v = null;
    if (userPic != null) {
        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.item_1, null);
        }

        TextView prime = (TextView) v
                .findViewById(R.id.prime);
        prime.setText("test");

        ImageView img = (ImageView) v
                .findViewById(R.id.my_image);
        //NPE happens here
        img.setVisibility(View.GONE);


        return v;
    } else {
        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.item_2, null);
        }

        TextView prime = (TextView) v
                .findViewById(R.id.prime);
        prime.setText("test 2");

        Button button = (Button) v
                .findViewById(R.id.my_button);
        //NPE happens here
        button.setVisibility(View.GONE);

        return v;

    }
}

在我获得NPE的两个地方寻找//NPE happens here。即使我不应该得到一个,因为View v总是被设置。我有两个单独的xml布局,但它们只有一个有ImageView而另一个有按钮。我试过删除我的gen并清理我的项目。

3 个答案:

答案 0 :(得分:0)

以正确的方式扩充布局

v = inflater.inflate(R.layout.list_item_apps, parent,false)

将此表单与false一起使用非常重要。

答案 1 :(得分:0)

尝试将您的主要文本视图和按钮保留在您执行视图通胀的if和else块中。

答案 2 :(得分:0)

取代......

View v;

用于代码中的每个位置

convertView 

getView();

参数中的变量

...谢谢