Search code examples
androidandroid-fragmentsandroid-viewpagerandroid-listfragmentfragmenttransaction

ListFragment onListItemClick not working


I'm using tab layout with swipeable example, On of the tab is list view, and when clicked on list item new fragment opens up. My issue is when i click on list item, nothing is happening. i'm using following example and adding my code androidhive.info/category/tab-view

AddingList

import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class AddingList extends ListFragment {
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String[] values = new String[] { "List", "iPhone", "WindowsMobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
        "Linux", "OS/2" };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);

  }

  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
      FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.replace(R.id.pager, new List()).commit();
  }
} 

Solution

  • Move your code in onCreateView() method from onActivityCreated() method

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        String[] values = new String[] { "List", "iPhone", "WindowsMobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
        "Linux", "OS/2" };
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, values);
    
        setListAdapter(adapter);
    
        return super.onCreateView(inflater, container, savedInstanceState);
     }
    

    UPDATE:

      @Override
      public void onListItemClick(ListView l, View v, int position, long id) {
    
    
          FragmentManager manager = getFragmentManager();
          FragmentTransaction ft = manager.beginTransaction();
          ft.replace(R.id.pager, new Home());
          ft.commit();
    
      }
    

    Implement this method in your Fragment.

     @Override
     public void setUserVisibleHint(boolean isVisibleToUser) {
      super.setUserVisibleHint(isVisibleToUser);
    
      // Make sure that we are currently visible
      if (this.isVisible()) {
        // Do your stuff here
        if (!isVisibleToUser) {
            Log.d("MyFragment", "Not visible");
    
        }
      }
      }