Страница 1 из 1

onAttach(Activity) Deprecated

Добавлено: 19 ноя 2015, 23:06
j-test
Как реализовать передачу сообщений в активити после того как onAttach(Actitivity) стал Deprecated (достали разрабы...) ?
//этот вопрос уже задал в теме урока 106, но там как-то давно никого не было, поэтому думаю может тут быстрее ответят....

пробовал вот так-

Код: Выделить всё

public interface onMainMenuListener
    {
        public void onButtonClickEvent(int i);
    }

    onMainMenuListener mainMenuListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try {

            Activity activity;
            if (context instanceof Activity){
                activity=(Activity) context;

            mainMenuListener = (onMainMenuListener) activity;

            }

        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(context.toString()+" must implement onMainMenuListener");
        }
    }
в итоге на попытке передать значение приложение вылетает

Код: Выделить всё

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

        View v=inflater.inflate(R.layout.mainmenu_fragment,container,false);
        Button trainButton = (Button) v.findViewById(R.id.button_train);
        trainButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                [color=#BF0000]mainMenuListener.onButtonClickEvent(1);[/color]
            }
        });


        Button youtubeButton = (Button) v.findViewById(R.id.button_youtube);
        youtubeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                [color=#BF0000]mainMenuListener.onButtonClickEvent(2);[/color]
            }
        });


        return v;
    }
FATAL EXCEPTION: main

java.lang.NullPointerException
at company.ais.simplearithmetic.fragment.MainMenuFragment$1.onClick(MainMenuFragment.java:58)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

Re: onAttach(Activity) Deprecated

Добавлено: 20 ноя 2015, 09:15
klblk
Если используете фрагменты из support library то метод "onAttach(Context context)" должен нормально работать, иначе этот метот будет работат только на Android 6.0+, в данном случае либо используйте старый метод либо разруливайте логику для разных версий Android.
ну и в try будет достаточно строчки:
[syntax=java]mainMenuListener = (onMainMenuListener) context;[/syntax]

Re: onAttach(Activity) Deprecated

Добавлено: 20 ноя 2015, 11:28
Mikhail_dev
if (context instanceof Activity){
activity=(Activity) context;
Данное условие не выполняется, поэтому и NullpointerException. Ведь может быт ьи не Activity, а например AppCompatActivity, или FragmentActivity, или еще чего там. Решение вам написали постом выше. Просто замените код

Re: onAttach(Activity) Deprecated

Добавлено: 20 ноя 2015, 12:05
j-test
Спасибо за ответы! включил support.v4 и все заработало! (пришлось еще getSupportFragmentManager() вместо getFragmentManager() использовать)