Попытка изменить кнопку назад для активности - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь изменить навигацию по кнопке «Назад» для указанного действия c, но у меня возникает ошибка

НЕПРЕРЫВНАЯ ИСКЛЮЧЕНИЕ ТЕКУЩАЯ ДЕЯТЕЛЬНОСТЬ: BookmarksActivity java .lang.NullPointerException: Попытайтесь вызвать виртуальный метод 'void android .os.Bundle.unparcel ()' для пустой ссылки на объект в android .os.Bundle.putAll (Bundle. java: 250) в android .content. Intent.putExtras (Intent. java: 8597) на usb.terminal.view.fragment.BookmarksFragment $ 2.onItemClick (BookmarksFragment. java: 162)

Я пробовал два подхода, Я изменил функцию кнопки «Назад» в своем ActionBarFragment. Проблема с моим вторым подходом состоит в том, что он переходит к требуемой активности, как и ожидалось, но продолжает сбой с ошибкой, указанной выше, когда я нажимаю на элемент в моем списке.

private void initListeners() {
    btnBackListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {

                Log.d("Back Button", "Back button pressed");

                int flag = BookmarksFragment.getFlag();
                Log.d("Flag Number", String.valueOf(flag));

                if (flag == 1){
                    BookmarksFragment class2 = new BookmarksFragment();
                    class2.fetchBookmarkCategories();
                }

                else {
                    if(getActivity()!=null) {
                        getActivity().finish();
                    }
                }

            }
            return true;
        }
    };

и, во-вторых, вместо вызова функция другого класса, я попытался перезагрузить действие, используя:

BookmarksFragment class2 = new BookmarksFragment();
                    class2.fetchBookmarkCategories();

Это мое действие закладки, которое я пытаюсь получить желаемую функцию.

public class BookmarksActivity extends EmptyActivity {


    public BookmarksActivity() {
        super(new BookmarksFragment());
    }

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


    @Override
    protected void onStart() {
        super.onStart();
        ((ActionBarFragment) actionBarFragment).updateTitle(R.string.bookmark_activity_title);
    }

}

Это мой BookmarkFragment (только часть кода):

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        this.userId = PreferencesHelper.getPrefsUserId(ctx);
        categoriesListView = (NonScrollListView) view.findViewById(R.id.bookmark_categories_list);
        recipesListView = (NonScrollListView) view.findViewById(R.id.bookmark_recipes_list);
        noResultLayout = (LinearLayout)this.getView().findViewById(R.id.bookmark_recipes_empty_panel);

        scrollButton = (CardView) this.getView().findViewById(R.id.load_more_button);
        scrollAction = (LinearLayout) this.getView().findViewById(R.id.load_more_action_layout);
        scrollLoading = (LinearLayout) this.getView().findViewById(R.id.load_more_loading_layout);
        scrollLoadingImage = (ImageView) this.getView().findViewById(R.id.load_more_loading_icon);

        recipesAdapter = new RecipesAdapter(ctx, recipesLinkedList);

        categoriesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Category category = categoriesLinkedList.get(position);
                fetchBookmarksFromCategory(category.getId());
            }
        });

        recipesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent = new Intent(ctx, RecipePagerActivity.class);
                Bundle extras = activity.getIntent().getExtras();
                intent.putExtra("Check_Status", 1);
                intent.putExtras(extras);
                int recipeId = recipesLinkedList.get(position).getId();
                int recipeCount = recipesLinkedList.get(position).getNbFavorite();
                boolean recipeStatus = recipesLinkedList.get(position).isFavorite();
                intent.putExtra("Recipe Status", recipeStatus);
                intent.putExtra("Recipe_Count", recipeCount);
                intent.putExtra(RecipesManager.KEY_ID_RECIPE, recipeId);

            }
        });

        setSpinner(view);

        fetchBookmarkLists();
    }

Оба подхода дают мне одинаковые ошибки. Может кто-нибудь помочь с решением здесь, пожалуйста?

1 Ответ

1 голос
/ 04 февраля 2020

Кажется, что activity.getIntent().getExtras() возвращает нулевое значение.

Пожалуйста, попробуйте обнулить проверку перед использованием extras и присвойте new Bundle(), если необходимо, что-то вроде ...

                int recipeId = recipesLinkedList.get(position).getId();
                int recipeCount = recipesLinkedList.get(position).getNbFavorite();
                boolean recipeStatus = recipesLinkedList.get(position).isFavorite();

                Intent intent = new Intent(ctx, RecipePagerActivity.class);
                Bundle extras = activity.getIntent().getExtras();
                if (extras == null) extras = new Bundle();  //solution

                extras.putInt("Check_Status", 1);
                extras.putInt(RecipesManager.KEY_ID_RECIPE, recipeId);
                extras.putInt("Recipe_Count", recipeCount);
                extras.putBoolean("Recipe Status", recipeStatus);
                intent.putExtras(extras);
...