2016-05-08 2 views
0

Я использую picasso для загрузки фотографий из Интернета в меню ящика приложения. Но теперь у меня проблема, которую я был в ловушке в течение всего дня здесь мой XML:view.findViewById возвращает null, что приводит к ошибке «Target not be null» с помощью Picasso

</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); 
} 

Теперь, когда я запустите этот проект, консоль сообщит об ошибке «Caused by: java.lang.IllegalArgumentException: Target не должен быть пустым».

Я отлаживал, нашел, что ivMenuUserProfilePhoto действительно имеет значение, но я не знаю почему. Как получилось, что findviewById не работает?

ответ

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

+0

Спасибо! Но это ошибка копирования-пасты, извините – Zafir

+0

Ха-ха, не беспокойтесь, все делают это xD – Patrick

0

getActivity() не следует использовать из onCreateView() может возвращать нуль, так как фрагмент не может быть полностью прикреплен с Мероприятия. Попробуйте позвонить setupHeader() с onAttach(Activity activity). Вы можете сослаться на эту ссылку: getActivity() returns null in Fragment function.

Смежные вопросы