0

Я не нашел сообщений для отображения настроенного тоста в ListFragment. У меня есть поиск по всему. Вот мой настраиваемый XML-файл, используемый для отображения тоста.Android - Отображение настраиваемого тоста в ListFragment вызывает ошибку

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

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="@string/course_deleted" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="@android:color/white" > 
    </TextView> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_margin="5dip" 
     android:contentDescription="@string/delete" 
     android:src="@drawable/ic_action_discard" > 
    </ImageView> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView1" 
     android:gravity="center" 
     android:textColor="@android:color/white" > 
    </TextView> 

</RelativeLayout> 

и метод, который есть этот XML является:

private void delete(String course) { 
    DatabaseHandler db = new DatabaseHandler(this.getActivity()); 
    boolean status = db.deleteCourse(UNI, course); 
    if (status) { 
     view = inflater.inflate(
       R.layout.custom_toast_layout_course_deleted, 
       (ViewGroup) getActivity() 
         .findViewById(R.id.relativeLayout5)); 

     Toast toast = new Toast(getActivity()); 
     toast.setGravity(Gravity.TOP, 0, 0); 
     toast.setDuration(Toast.LENGTH_SHORT); 
     toast.setView(view); 
     toast.show(); 
    } 
} 

Но при запуске моего приложения она показывает эту ошибку:

11-13 09:48:13.521: E/AndroidRuntime(11052): FATAL EXCEPTION: main 
11-13 09:48:13.521: E/AndroidRuntime(11052): java.lang.NullPointerException 
11-13 09:48:13.521: E/AndroidRuntime(11052): at ......delete(POKFragment.java:173) 
11-13 09:48:13.521: E/AndroidRuntime(11052): at ......access$0(POKFragment.java:161) 
11-13 09:48:13.521: E/AndroidRuntime(11052): at ......onClick(POKFragment.java:107) 

и линия 173 является:

view = inflater.inflate(R.layout.custom_toast_layout_course_deleted,(ViewGroup) getActivityity().findViewById(R.id.relativeLayout5)); 

Что не так в этом коде? Он отлично работает для Activity, но не работает с ListFragment.

+0

предоставляется xml для активности или вашего фрагмента? –

+0

его custome xml, который раздувается во Фрагменте, чтобы отобразить Toast. –

+0

Вы уверены, что ваш инфлятор не пуст? – DrkStr

ответ

1

Нужно изменить

view = inflater.inflate(
      R.layout.custom_toast_layout_course_deleted, 
      null)); 

Также убедитесь, что ваш inflater не должен быть пустым.

0

Если ваш xml завышен в самом фрагменте, тогда вам не нужно указывать какой-либо параметр Activity.

view = inflater.inflate(R.layout.custom_toast_layout_course_deleted,null); 
+0

Я уже назвал это в моем методе onCreate (..): inflater = getActivity(). GetLayoutInflater(); и все еще его метать NullPointerException –

+0

@AnishPanthi Пожалуйста, внесите свой полный код –

+0

см. Мой код ... –

0

Я опубликовал только метод onCreate (..) и метод, в котором накачан тост.

public class POKFragment extends ListFragment { 

ListView list; 
View rootView, view; 

LayoutInflater inflater; 
ArrayAdapter<String> courseAdapter = null; 
DatabaseHandler db = null; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    rootView = inflater.inflate(R.layout.fragment_pok, container, false); 

    list = (ListView) rootView.findViewById(android.R.id.list); 

    inflater = getActivity().getLayoutInflater(); 

    int[] colors = { 0, 0xFF0072BC, 0 }; 
    list.setDivider(new GradientDrawable(Orientation.LEFT_RIGHT, colors)); 
    list.setDividerHeight(3); 

    courseAdapter = new ArrayAdapter<String>(this.getActivity(), 
      android.R.layout.simple_list_item_1, courses); 
    setListAdapter(courseAdapter); 
    courseAdapter.notifyDataSetChanged(); 

    return rootView; 
} 
............... 
............... 
private void delete(String course) { 
    DatabaseHandler db = new DatabaseHandler(this.getActivity()); 
    boolean status = db.deleteCourse(UNI, course); 
    if (status) { 
     view = inflater.inflate(
       R.layout.custom_toast_layout_course_deleted, null); 

     Toast toast = new Toast(getActivity()); 
     toast.setGravity(Gravity.TOP, 0, 0); 
     toast.setDuration(Toast.LENGTH_SHORT); 
     toast.setView(view); 
     toast.show(); 
    } 
} 
........... 
........... 
} 
+1

Посмотрите мои анны и используйте их в сочетании с ответами Пиюша Гупта. – DrkStr

1

Вы проблема заключается в том, что у вас есть эта линия

inflater = getActivity().getLayoutInflater(); 

в onCreateView. Его нужно вызвать после onAttach(). Так сделайте это в onStart или inActivityCreated.