Я создал приложение для Android, например галерею, в которой есть изображения с использованием вкладки фрагмента
Функциональность работает нормально, но когда я добавляю setOnItemClickListener в свой код, появляется ошибка
Ошибка: не удается разрешить метод getApplicationContext ()
вы также можете проверить снимок экрана с ошибкой: http://prntscr.com/kc6zay
Просмотрите мой код и подскажите, как я могу решить эту проблему.
public class CallFragment extends Fragment {
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
View view = inflater.inflate(R.layout.fragment_call,container,false);
GridView gridView = (GridView) view.findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity().
// Listening to GridView item click
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// Launch ImageViewPager.java on selecting GridView Item
Intent i = new Intent(getApplicationContext(), ImageViewPager.class);
// Show a simple toast message for the item position
//Toast.makeText(CallFragment.this, "" + position, Toast.LENGTH_SHORT).show();
// Send the click position to ImageViewPager.java using intent
i.putExtra("id", position);
// Start ImageViewPager
startActivity(i);
}
});
}
// public View onCreateView(LayoutInflater inflater, ViewGroup container,
// Bundle savedInstanceState) {
// Inflate the layout for this fragment
// setHasOptionsMenu(true);
// return inflater.inflate(R.layout.fragment_call, container, false);
// }
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_calls, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_call) {
Toast.makeText(getActivity(), "Clicked on " + item.getTitle(), Toast.LENGTH_SHORT)
.show();
}
return true;
}
}
Попробуй это:
Добавьте ниже код в CallFragment
private Context context;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
В вашем onItemClick
Intent i = new Intent(context, ImageViewPager.class);
извините, я не понимаю: добавьте код ниже во фрагменте
В вашем CallFragment
Я пробую ваш код, но когда я тестирую свое приложение и нажимаю на элемент, мое приложение продолжает останавливаться и говорит: закрыть приложение
E / InputEventReceiver: входное событие отправки исключения. E / MessageQueue-JNI: исключение в обратном вызове MessageQueue: handleReceiveCallback E / MessageQueue-JNI: android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.codingdemos.tablayout / com.codingdemos.tablayout.ImageVi ewPager}; Вы указали это действие в своем AndroidManifest.xml?
ImageViewPager - это действие? Убедитесь, что вы добавили его в манифест
Я добавил свой ImageViewPager в манифест, и теперь он работает. Спасибо.
Вы не начинаете деятельность с getApplicationContext.
Используйте getActivity():
Intent i = new Intent(getActivity(), ImageViewPager.class);
Я пробую ваш код Intent i = new Intent (getActivity (), ImageViewPager.class); но когда я тестирую свое приложение и нажимаю на него, мое приложение продолжает останавливаться и говорит: закрыть приложение
getActivity() может быть нулевым
getActivity() равен нулю до события onAttach(). После этого это не ноль и, конечно же, не внутри слушателя, который запускается после onAttach()
это потому, что ни у
AdapterView.OnItemClickListener, ни уFragmentнет такого метода