Android исчезновение LinearLayout в RecyclerView по нажатию

Есть RecyclerView и в нем есть item с LinearLayout, мне нужно чтобы по нажатию, LinearLayout становился gone. Я попытался реализовать это, но по нажатию приложение крашиться. Как исправить ошибку?

Fragment

public class FavoritesTabs extends Fragment {

    private boolean firstPlayed_edit = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_favorites_tabs, container, false);
    }
    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {

        CardView cardView = requireView().findViewById(R.id.edit_card);
        LinearLayout linearLayout = requireView().findViewById(R.id.edit_menu);

        cardView.setOnClickListener(view1 -> {
            if (!firstPlayed_edit)
            {
                linearLayout.setVisibility(View.VISIBLE);
                firstPlayed_edit = true;
            } else {
                linearLayout.setVisibility(View.GONE);
                firstPlayed_edit = false;
            }
        });

        ArrayList<FavoritesAdapter.FavoritesItem> exampleList = new ArrayList<>();
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_main_22, "Line 1"));
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_baseline_menu_24, "Line 2"));
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_handbook_1, "Line 3"));

        RecyclerView mRec = requireView().findViewById(R.id.card_recy_f);
        mRec.setHasFixedSize(true);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
        FavoritesAdapter mAdapter = new FavoritesAdapter(exampleList);
        mRec.setLayoutManager(mLayoutManager);
        mRec.setAdapter(mAdapter);

        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new FavCardItemTouchHelperCallback(mAdapter));
        mAdapter.setItemTouchHelper(itemTouchHelper);
        itemTouchHelper.attachToRecyclerView(mRec);


    }
}

fragment_favorites_tabs.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/liner"
    style="@style/LinearLayout_0">

    <androidx.cardview.widget.CardView
        android:id="@+id/edit_card"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="0dp"
        app:cardElevation="0dp">

        <LinearLayout style="@style/LinearLayout_9">

            <ImageView
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:padding="8dp"
                android:src="@drawable/ic_baseline_edit_24" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="48dp"
                android:gravity="fill_vertical"
                android:text="Edit"
                android:textSize="20sp" />

        </LinearLayout>

    </androidx.cardview.widget.CardView>

    <View style="@style/View_1" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/card_recy_f"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>

fragment_card.xml

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cat_card_list_item_card"
    style="@style/CardView_1"
    android:layout_marginTop="6dp"
    app:cardCornerRadius="0dp"
    app:cardElevation="0dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <View style="@style/View_1" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="96dp"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/card_img_2"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:padding="12dp"
                android:src="@drawable/ic_quick_menu" />

            <TextView
                android:id="@+id/card_txt"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:textSize="16sp" />

            <View style="@style/View_2" />

            <LinearLayout
                android:id="@+id/edit_menu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone">

                <ImageView
                    android:id="@+id/card_img"
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:padding="12dp"
                    android:src="@drawable/ic_baseline_menu_24" />

                <ImageView
                    android:id="@+id/card_img_3"
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:padding="12dp"
                    android:src="@drawable/ic_baseline_close_24" />
            </LinearLayout>
        </LinearLayout>

        <View style="@style/View_1" />
    </LinearLayout>
</androidx.cardview.widget.CardView>

Ошибка по нажатию

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference
        at com.example.myapplication.ui.News_Favorites.FavoritesTabs.lambda$onViewCreated$0$FavoritesTabs(FavoritesTabs.java:42)
        at com.example.myapplication.ui.News_Favorites.-$$Lambda$FavoritesTabs$hDt98Z7n2Ok4B8mN7WJvDEROMU0.onClick(lambda)
        at android.view.View.performClick(View.java:5692)

FavoritesTabs вместе с inflate но по нажатию ничего не происходит

public class FavoritesTabs extends Fragment {

    private boolean firstPlayed_edit = false;

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_favorites_tabs, container, false);

    }

    @SuppressLint("InflateParams")
    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {

        ArrayList<FavoritesAdapter.FavoritesItem> exampleList = new ArrayList<>();
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_main_22, "Line 1"));
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_baseline_menu_24, "Line 2"));
        exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_handbook_1, "Line 3"));

        RecyclerView mRec = requireView().findViewById(R.id.card_recy_f);

        mRec.setHasFixedSize(true);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
        FavoritesAdapter mAdapter = new FavoritesAdapter(exampleList);
        mRec.setLayoutManager(mLayoutManager);
        mRec.setAdapter(mAdapter);

        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new FavCardItemTouchHelperCallback(mAdapter));
        mAdapter.setItemTouchHelper(itemTouchHelper);
        itemTouchHelper.attachToRecyclerView(mRec);

        CardView cardView = requireView().findViewById(R.id.edit_card);

        LinearLayout linear = requireView().findViewById(R.id.liner);

        LayoutInflater ltInflater = getLayoutInflater();
        View rootView = ltInflater.inflate(R.layout.fragment_card, linear, true);
        LinearLayout linearLayout = (LinearLayout) rootView.findViewById(R.id.edit_menu);
        ltInflater.inflate(R.layout.fragment_card, linearLayout);

        cardView.setOnClickListener(view1 -> {
            if (!firstPlayed_edit) {
                linearLayout.setVisibility(View.VISIBLE);
                firstPlayed_edit = true;
            } else {
                linearLayout.setVisibility(View.GONE);
                firstPlayed_edit = false;
            }
        });

    }
}

Ответы (1 шт):

Автор решения: Barmaley

У вас LinearLayout без id, а вы пытаетесь взять его по имени R.id.edit_menu, в итоге напарываетесь на NullPointerException

Update

Вы инфлейтите лейаут, fragment_favorites_tabs и ищете там R.id.edit_menu, который находится в лейауте fragment_card - перепишите свой код.

→ Ссылка