view.findViewById返回null,使用Picasso导致“Target must not null”错误

时间:2016-05-08 13:19:39

标签: android picasso

我正在使用毕加索将图片从网页加载到我应用的抽屉菜单中。 但现在我遇到了一个问题,我被困了一整天 这是我的xml:

</FrameLayout>`<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:clickable="true">
<LinearLayout
    android:id="@+id/vGlobalMenuHeader"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/ivMenuUserProfilePhoto"
        android:layout_width="@dimen/global_menu_avatar_size"
        android:layout_height="@dimen/global_menu_avatar_size"
        android:layout_margin="12dp" />

</LinearLayout>

这是我的Java文件:

public class MyMenuFragment extends MenuFragment {

private ImageView ivMenuUserProfilePhoto;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container,
            false);
    ivMenuUserProfilePhoto = (ImageView)view.findViewById(R.id.ivMenuUserProfilePhoto);
    setupHeader();
    return setupReveal(view) ;
}

private void setupHeader() {
    int avatarSize = getResources().getDimensionPixelSize(R.dimen.global_menu_avatar_size);
    String profilePhoto = getResources().getString(R.string.user_profile_photo);
    Picasso.with(getActivity())
            .load(profilePhoto)
            .placeholder(R.drawable.img_circle_placeholder)
            .resize(avatarSize, avatarSize)
            .centerCrop()
            .transform(new CircleTransformation())
            .into(ivMenuUserProfilePhoto);
}

现在,当我运行此项目时,控制台会报告错误“由以下引起:java.lang.IllegalArgumentException:Target不能为null。”

我调试过,发现 ivMenuUserProfilePhoto确实为空,但我不知道为什么会发现findviewById不起作用?

2 个答案:

答案 0 :(得分:0)

看起来你不小心搬到了XML文件的开头而不是它应该的结尾。你还添加了一个`也不需要在那里。

所以看起来应该是这样的:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:clickable="true">
    <LinearLayout
        android:id="@+id/vGlobalMenuHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/ivMenuUserProfilePhoto"
            android:layout_width="@dimen/global_menu_avatar_size"
            android:layout_height="@dimen/global_menu_avatar_size"
            android:layout_margin="12dp" />

    </LinearLayout>
</FrameLayout>

希望它能解决它:D

答案 1 :(得分:0)

不应该在onCreateView()中使用

getActivity(),它可能会返回null,因为片段可能无法与活动完全附加。您应该尝试从setupHeader()拨打onAttach(Activity activity)。您可以参考此参考链接 - getActivity() returns null in Fragment function