Search code examples
androidlistviewandroid-fragmentsonclicklistener

Error in opening actvity from fragment through ListView using switch case


I want to open activity from fragment by clicking on the ListView, but I am getting an error on the particular line. I have mentioned below I have gone through many documentation, but none is working for me.

Any help would be great. Thank you!

public class ServicesFragment extends Fragment {


    ListView listView;
    String[] servicesNameArray;
    int[] serviceImages = {
            R.drawable.ic_menu_camera,
            R.drawable.ic_menu_camera,
            R.drawable.ic_menu_camera};

    public ServicesFragment() {
    }
    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.services_fragment, container, false);
        Resources resources = getResources();
        servicesNameArray = resources.getStringArray(R.array.servicesName);
        listView = (ListView) view.findViewById(R.id.listView_services);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                int positionNew = Integer.parseInt(String.valueOf(position));
               int pos = (int) adapterView.getItemAtPosition(positionNew);//error in this line
                switch (pos) {

                    case 0:
                        Intent intent = new Intent(getActivity(), SlipActivity.class);
                        startActivity(intent);
                        break;}}});

        ServicesAdapter adapter = new ServicesAdapter(this.getActivity(), servicesNameArray, serviceImages);
        listView.setAdapter(adapter);
        return view;
    }

    public class ServicesAdapter extends ArrayAdapter<String> {
Context c;
        int[] servicesImageArray;
        String[] servicesNameArray;
 public ServicesAdapter(Context context, String[] servicesNameArray, int[] serviceImages) {
            super(context, R.layout.services_layout, R.id.listView_services, servicesNameArray);
            Log.d("ashu", "adapter called");
            this.c = context;
            this.servicesImageArray = serviceImages;
            this.servicesNameArray = servicesNameArray;}}}

Logcat:

          java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
              at com.bulletin.theinvincible.nautical.ServicesFragment$1.onItemClick(ServicesFragment.java:73)

Solution

  • From the Documentation

    Object getItemAtPosition (int position) : Gets the data associated with the specified position in the list.

    If you want to start new activity based on listview position. You can simply try:

        listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
    
             switch (position) {
                        case 0:
                            Intent intent = new Intent(getActivity(), SlipActivity.class);
                            startActivity(intent);
                            break;
                    }
            }
    });