繁体   English   中英

Android-findViewById(int id)始终返回null

[英]Android - findViewById(int id) always returns null

我已经创建了CreateEvent活动

        @Override
        public void onClick(View v) {
            Intent in = new Intent(UserActivity.this, CreateEvent.class);
            startActivity(in);
        }
    });

在CreateEvent活动中,我想创建listView,这是我的代码:

@Override
public void friendsDownlaoded(ArrayList<User> friends) {
    this.friends = friends;
    this.adapter = new  InviteFriendAdapter(getLayoutInflater());
    this.friendListview.setAdapter(adapter);
    removeRoation();    
    setUpContent();
}

这是InviteFriendAdapter的代码,它是内部类,可以看到ArrayList朋友:

private class InviteFriendAdapter extends BaseAdapter {
    private LayoutInflater inflater;

    public InviteFriendAdapter(LayoutInflater inflater) {
        this.inflater = inflater;
    }

    @Override
    public int getCount() {
        return friends.size();
    }

    @Override
    public Object getItem(int i) {
        return friends.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View myView, ViewGroup vg) {
        FriendHolder frndHolder;
        User user = friends.get(position);


        if (myView == null) {
            myView = this.inflater.inflate(R.layout.invite_friends_event_item, null,false);
            ImageView img= (ImageView) findViewById(R.id.inviteCheckBox);
            frndHolder = new FriendHolder();
            frndHolder.hisImage = (ImageView) findViewById(R.id.inviteCheckBox);
            frndHolder.hisNumber = (TextView) findViewById(R.id.inviteHisNumber);
            frndHolder.hisName = (TextView) findViewById(R.id.inviteHisName);

            myView.setTag(frndHolder);
        } else {
            frndHolder = (FriendHolder) myView.getTag();
        }


        frndHolder.hisName.setText("aa");
        frndHolder.hisNumber.setText("uUU");

        return myView;
    }

}

private static class FriendHolder {
    TextView hisName;
    TextView hisNumber;
    ImageView hisImage;
}

我检查了ArrayList的朋友,它不为null。 该程序在适配器getView()上抛出NullPointException,原因是当myView == null时-(ImageView)findViewById(R.id.inviteCheckBox); 返回null

这是项目的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/possibleFriendInviteHolder"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/inviteHisName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_margin="@dimen/possible_his_number_margin"
        android:textSize="@dimen/possible_his_name_text" />

    <TextView
        android:id="@+id/inviteHisNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/inviteHisName"
        android:layout_margin="@dimen/possible_his_number_margin"
        android:textSize="@dimen/possible_his_number_text" />

    <ImageView
        android:id="@+id/inviteCheckBox"
        android:layout_width="@dimen/smile_pic_width"
        android:layout_height="@dimen/smile_pic_height"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_margin="@dimen/possible_check_box_margin"
        android:contentDescription="@string/image"
        android:scaleType="fitXY" />

</RelativeLayout>

我无法在网上找到解决方案。 我已经创建了几次适配器,并且效果很好,但是现在。.有人可以告诉我为什么findViewById()返回null吗? 先感谢您

在适配器getView() ,在展开的视图上而不是在活动视图层次结构上调用findViewById() (以防适配器是活动中的非静态内部类)。

在您的代码中,用myView.findViewById()替换findViewById() myView.findViewById()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM