Сбой OnClick при редактировании toastview и возврате

#java #android #facebook

#java #Android #Facebook

Вопрос:

Я пытаюсь добавить RelativeLayout, который уже есть в XML, в представление моего Toast. Это не мой основной поток пользовательского интерфейса.

 @Override
        public void onClick(View v) 
        {
            mContext.setContentView(R.layout.toast_layout);
            Drawable myImage;

            Toast imageToast = new Toast(mContext);

            final RelativeLayout toastLayout = (RelativeLayout) mContext.findViewById(R.id.relative_toast);
            final ImageView myIv = (ImageView)toastLayout.findViewById(R.id.tImage);
            final TextView nameText = (TextView)toastLayout.findViewById(R.id.tFriendName);
            final TextView interestText = (TextView)toastLayout.findViewById(R.id.tInterests);

            myImage = getImageDrawable(mContext, friend.getmPic(), "image.jpg");

            myIv.setImageDrawable(myImage);

            nameText.setText("Name: "   friend.getmName()  
                             "nID: "   friend.getmId());
            nameText.setPadding(10, 0, 0, 5);
            nameText.setTextColor(Color.BLACK);

            interestText.setText("Interests: "   friend.getmInterests());
            interestText.setTextColor(Color.BLACK);

            toastLayout.setBackgroundColor(Color.LTGRAY);
            toastLayout.setMinimumHeight(400);
            toastLayout.setMinimumWidth(250);
            toastLayout.setPadding(10, 10, 10, 10);

            imageToast.setView(toastLayout);
            imageToast.setDuration(Toast.LENGTH_LONG);
            imageToast.show();
        }
  

Debug показывает сбой при возврате из этой области.

Logcat:

 04-27 00:15:56.091: ERROR/AndroidRuntime(586): FATAL EXCEPTION: main
04-27 00:15:56.091: ERROR/AndroidRuntime(586): java.lang.IllegalArgumentException: View not attached to window manager
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.widget.Toast$TN.handleShow(Toast.java:370)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.widget.Toast$TN$1.run(Toast.java:302)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.os.Handler.handleCallback(Handler.java:587)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.os.Looper.loop(Looper.java:123)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at java.lang.reflect.Method.invokeNative(Native Method)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at java.lang.reflect.Method.invoke(Method.java:521)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-27 00:15:56.091: ERROR/AndroidRuntime(586):     at dalvik.system.NativeStart.main(Native Method)
  

Что я здесь меняю, чего не должно быть?

Спасибо.

Ответ №1:

если вы пытаетесь создать пользовательский макет toast, вам следует сохранить xml для макета в его собственном XML-файле ресурсов (ie toast_layout.xml ) затем выше вы должны

 LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.toast_layout,
            (ViewGroup) findViewById(R.id.toast_layout_root));
  

где toast_layout_root является корневым элементом вышеупомянутого toast_layout.xml

затем

 toast.setView(layout);
  

Комментарии:

1. Спасибо за ответ. Он по-прежнему выдает то же исключение: «Просмотр, не прикрепленный к оконному менеджеру»