У меня работает фрагмент, который имеет часть своего макета загрузки карты RecyclerView. Из этой карты я хочу запустить новый фрагмент, который открывает полноэкранный макет.
public class MemoriesFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MemListFragment fragment = new MemListFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.placeholder, fragment);
fragmentTransaction.commit();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_authoring_memory_menu_1, container, false);
return view;
}}
Это основной фрагмент. Следующий фрагмент - это фрагмент, который создает и заполняет RecyclerView
public class MemListFragment extends Fragment {
ImageButton button1;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_authoring_memory_list, container,false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.listRecyclerView);
ListAdapter listAdapter = new ListAdapter();
recyclerView.setAdapter(listAdapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
button1 = view.findViewById(R.id.memory_image);
return view;
}}
Это RecyclerView
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private LayoutInflater layoutInflater;
private List<String> data;
public ImageButton memory_image;
public Adapter(MemoriesFragment Context, List<String> data){
// this.layoutInflater = LayoutInflater.from();
this.data = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = layoutInflater.inflate(R.layout.memory_view,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
// bind the textview with data received
String title = data.get(i);
viewHolder.textTitle.setText(title);
// similarly you can set new image for each card and descriptions
viewHolder.memoryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment MemoryDetails = new MemoryDetails();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.placeholder, MemoryDetails).addToBackStack(null).commit();
}
});
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
// Define UI components here
TextView textTitle;
ImageButton memoryButton;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textTitle = itemView.findViewById(R.id.textTitle);
memoryButton = itemView.findViewById(R.id.memory_image);
}
}
}
Recylerview создается с помощью memory_view. xml, в котором есть только текст и кнопка изображения с именем memory_image. Когда я запускаю этот код, происходит сбой при нажатии кнопки изображения.
Редактировать: добавлен журнал ошибок ниже
2020-02-21 16:50:29.334 19558-19558/com.app.emotivo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.emotivo, PID: 19558
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatImageButton with id 'memory_image'
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:434)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:391)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)