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 - перепишите свой код.