Android how to send an Intent from a fragment when a RecyclerView item is clicked

idclark

My app is coded with a RecyclerView that is contained within a fragment. I'm able to successfully populate the RecyclerView with a list of mock data, however I don't how how to send an Intent to another Activity when one of the items is clicked. When I try to call StartActivity from within my fragment, Android Studio cannot resolve the method.

My onItemClick is implemented via an interface in my viewholder class. The interface also generates an error inner classes cannot have static declarations. I'm wondering if I'm unable to call StartActivity from the fragment because neither my RecyclerView adapter or viewholder classes extend Activity.

What the appropriate implementation to send an Intent when an item in a RecyclerView is clicked?

PlaceHolderFragment

public static class PlaceholderFragment extends Fragment {

        Activity mActivity;
        RecyclerView mRecyclerView;
        TaskAdapter taskAdapter;

        public PlaceholderFragment() {
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            this.mActivity = (Activity) activity;
            setRetainInstance(true);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            mRecyclerView = (RecyclerView) rootView.findViewById(R.id.cardList);
            taskAdapter = new TaskAdapter(createList(30));
            return rootView;
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            mRecyclerView.setAdapter(taskAdapter);
            mRecyclerView.setHasFixedSize(true);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());

            //Cannot resolve method 
            taskAdapter.SetItemClickListener(new TaskAdapter.TaskViewHolder.OnItemClickListener() {

                @Override
                public void onItemClick(View v, int position) {
                    Intent detailIntent = new Intent(v.getContext(), DetailActivity.class);
                    //Cannot resolve method 
                    StartActivity(detailIntent);

                }
            });

        }

        private List<Task> createList(int size) {
            List<Task> result = new ArrayList<>();
            for (int i = 1; i<=size; i++) {
                Task task = new Task();
                task.title = Task.TITLE_PREFIX + i;
                task.updated = Task.UPDATED_PREFIX +i;
                task.notes = task.NOTES_PREFIX + i;

                result.add(task);

            }
            return result;
        }
    }

TaskAdapter

public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder> {

    private List<Task> taskList;
    TaskViewHolder.OnItemClickListener mItemClickListener;

    public TaskAdapter(List<Task> taskList) {
        this.taskList = taskList;
    }

    @Override
    public int getItemCount() {
        return taskList.size();
    }

    @Override
    public void onBindViewHolder(TaskViewHolder taskViewHolder, int i) {
        Task task = taskList.get(i);
        taskViewHolder.mTitle.setText(task.title);
        taskViewHolder.mUpdated.setText(task.updated);
        taskViewHolder.mStatus.setChecked(false);
    }

    @Override
    public TaskViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View itemView = LayoutInflater.from(viewGroup.getContext()).
                inflate(R.layout.tasklist_layout, viewGroup, false);

        return new TaskViewHolder(itemView);
    }

    public class TaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected TextView mTitle;
        protected TextView mUpdated;
        protected CheckBox mStatus;

        public TaskViewHolder(View view) {
            super(view);
            mTitle = (TextView) view.findViewById(R.id.title);
            mUpdated = (TextView) view.findViewById(R.id.updated);
            mStatus = (CheckBox) view.findViewById(R.id.status);
            view.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if (mItemClickListener != null) {
                mItemClickListener.onItemClick(v, getPosition());
            }
        }
        //Inner Classes cannot have static declarations
        public interface OnItemClickListener {
            void onItemClick(View view , int position);
        }

        public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
            //cannot resolve symbol 
            this.mItemClickListener = mItemClickListener;
        }
    }
}
dora

The startActivity() method starts with small s. Try the below line of code

   //Cannot resolve method 
        taskAdapter.TaskViewHolder.SetItemClickListener(new TaskAdapter.TaskViewHolder.OnItemClickListener() {

            @Override
            public void onItemClick(View v, int position) {
                Intent detailIntent = new Intent(v.getContext(), DetailActivity.class);
                //Cannot resolve method 
                getActivity().startActivity(detailIntent);

            }
        });

The SetOnItemClickListener() should be outside TaskViewHolder class. Try the below one and see if it helps.

public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder> {

private List<Task> taskList;
TaskViewHolder.OnItemClickListener mItemClickListener;

public TaskAdapter(List<Task> taskList) {
    this.taskList = taskList;
}

@Override
public int getItemCount() {
    return taskList.size();
}

@Override
public void onBindViewHolder(TaskViewHolder taskViewHolder, int i) {
    Task task = taskList.get(i);
    taskViewHolder.mTitle.setText(task.title);
    taskViewHolder.mUpdated.setText(task.updated);
    taskViewHolder.mStatus.setChecked(false);
}

@Override
public TaskViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    View itemView = LayoutInflater.from(viewGroup.getContext()).
            inflate(R.layout.tasklist_layout, viewGroup, false);

    return new TaskViewHolder(itemView);
}

public class TaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected TextView mTitle;
    protected TextView mUpdated;
    protected CheckBox mStatus;

    public TaskViewHolder(View view) {
        super(view);
        mTitle = (TextView) view.findViewById(R.id.title);
        mUpdated = (TextView) view.findViewById(R.id.updated);
        mStatus = (CheckBox) view.findViewById(R.id.status);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (mItemClickListener != null) {
            mItemClickListener.onItemClick(v, getPosition());
        }
    }
    //Inner Classes cannot have static declarations
    public interface OnItemClickListener {
        void onItemClick(View view , int position);
    }
}

 public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
        //cannot resolve symbol 
        this.mItemClickListener = mItemClickListener;
    }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Android how to send an Intent from a fragment when a RecyclerView item is clicked

From Dev

Pass Item Position Clicked from a RecyclerView to the Fragment father

From Dev

How do I retrieve user email from Firebase Firestore and send it to an email intent when a button is clicked?

From Dev

Darkening an Item in recyclerView when clicked

From Dev

Image from clicked item of Recyclerview

From Dev

How to send values from dynamic item of ListView to a particular Intent?

From Dev

How to send value to server based on user clicked in spinner item in android?

From Dev

How to send cursor from android activity to fragment

From Dev

Send intent/answer back from fragment

From Dev

Display a fragment when an item in a listview is clicked

From Dev

Opening a new fragment when a ListView item is clicked

From Dev

Opening a new fragment when a ListView item is clicked

From Dev

How to load another Fragment in the same activity when any Gridview view item get clicked on First Fragment

From Dev

Android - Inflate fragment depending on listview item clicked

From Dev

How to get item from RecyclerView adapter in Android

From Dev

Android: How to call Fragment class from activity using Intent

From Dev

How to intent from activity to fragment picture ( android studio)

From Dev

Android: How to send data from parent fragment to child fragment

From Dev

Android: How to send data from parent fragment to child fragment

From Dev

get the data when an Item is clicked in recyclerview

From Dev

No toast shown when item clicked RecyclerView

From Dev

get the data when an Item is clicked in recyclerview

From Dev

App crashes when using putExtra in startActivity(intent) called from ViewHolder of RecyclerView inside Fragment

From Dev

How to send a value or string from android application to a server when a button is clicked

From Dev

how to send data from activity to fragment when user clicks on back button in android?

From Dev

How to send install intent to Android Wear watch from handheld

From Dev

Updating contents of a RecyclerView when item of another RecyclerView is clicked

From Dev

How to show Android ListView item in different layout file when clicked

From Dev

How to refresh other items when clicked a specific item of gridview in android

Related Related

  1. 1

    Android how to send an Intent from a fragment when a RecyclerView item is clicked

  2. 2

    Pass Item Position Clicked from a RecyclerView to the Fragment father

  3. 3

    How do I retrieve user email from Firebase Firestore and send it to an email intent when a button is clicked?

  4. 4

    Darkening an Item in recyclerView when clicked

  5. 5

    Image from clicked item of Recyclerview

  6. 6

    How to send values from dynamic item of ListView to a particular Intent?

  7. 7

    How to send value to server based on user clicked in spinner item in android?

  8. 8

    How to send cursor from android activity to fragment

  9. 9

    Send intent/answer back from fragment

  10. 10

    Display a fragment when an item in a listview is clicked

  11. 11

    Opening a new fragment when a ListView item is clicked

  12. 12

    Opening a new fragment when a ListView item is clicked

  13. 13

    How to load another Fragment in the same activity when any Gridview view item get clicked on First Fragment

  14. 14

    Android - Inflate fragment depending on listview item clicked

  15. 15

    How to get item from RecyclerView adapter in Android

  16. 16

    Android: How to call Fragment class from activity using Intent

  17. 17

    How to intent from activity to fragment picture ( android studio)

  18. 18

    Android: How to send data from parent fragment to child fragment

  19. 19

    Android: How to send data from parent fragment to child fragment

  20. 20

    get the data when an Item is clicked in recyclerview

  21. 21

    No toast shown when item clicked RecyclerView

  22. 22

    get the data when an Item is clicked in recyclerview

  23. 23

    App crashes when using putExtra in startActivity(intent) called from ViewHolder of RecyclerView inside Fragment

  24. 24

    How to send a value or string from android application to a server when a button is clicked

  25. 25

    how to send data from activity to fragment when user clicks on back button in android?

  26. 26

    How to send install intent to Android Wear watch from handheld

  27. 27

    Updating contents of a RecyclerView when item of another RecyclerView is clicked

  28. 28

    How to show Android ListView item in different layout file when clicked

  29. 29

    How to refresh other items when clicked a specific item of gridview in android

HotTag

Archive