2015-09-13 1 views
0

Я нахожусь на своем пути, пытаясь найти решение этой проблемы. Я не могу заставить OnItemClickListener работать с моим списком. Хотя аналогичный код работает отлично с gridview. Вот мой код.Почему OnItemClickListener не работает с ListView внутри фрагмента?

public class Songs extends ListFragment implements /*AdapterView.OnItemClickListener,*/ LoaderManager.LoaderCallbacks<Cursor> { 

SongsAdapter nAdapter; 
private static final String ARG_POSITION = "position"; 

private int position; 

public static Songs newInstance(int position) { 
    Songs f = new Songs(); 
    Bundle b = new Bundle(); 
    b.putInt(ARG_POSITION, position); 
    f.setArguments(b); 
    return f; 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View myFragmentView = inflater.inflate(R.layout.songs, container, false); 
    nAdapter = new SongsAdapter(getActivity(), null); 
    setListAdapter(nAdapter); 

    /* listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    });*/ 



    return myFragmentView; 
} 



@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 

    getLoaderManager().initLoader(0, null, this); 
    //ListView listView = (ListView) getActivity().findViewById(android.R.id.list); 
    //ListView listView = (ListView) getActivity().findViewById(android.R.id.list); 
    FloatingActionButton fab = (FloatingActionButton) getActivity().findViewById(R.id.fab); 
    fab.attachToListView(getListView()); 




    //getListView().setOnItemClickListener(this); 



} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Toast.makeText(getActivity(), "Clicked " + position, Toast.LENGTH_SHORT).show(); 

} 
/* 
@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
    Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_SHORT).show(); 

//  startActivity(new Intent(getActivity(), MusicPlayer.class).putExtra("position", position).putExtra("orderby", orderby).putExtra("selection", selection).putExtra("val", val)); 
} 

*/ 

Я попробовал все, включая реализацию OnItemClickListener на переопределение OnListItemClick. Но абсолютно ничего не работает.

Вот макет фрагмента

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
xmlns:fab="http://schemas.android.com/apk/res-auto" 
android:id="@+id/content_frame" 
android:layout_height="match_parent" 
android:background="@color/metalList"> 


<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:divider="@drawable/listdivider" 
    android:dividerHeight="0.5dp" 
    android:layout_gravity="right|top" 
    android:clickable="false" 
    android:focusable="false" 
    android:fadeScrollbars="true" 
    android:fastScrollEnabled="true" 
    android:scrollbarStyle="insideInset" 
    android:scrollbarAlwaysDrawVerticalTrack="true" 
    android:listSelector="@drawable/songlist_selector"/> 
<com.melnykov.fab.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|right" 
    android:layout_marginRight="26dp" 
    android:layout_marginBottom="16dp" 
    android:src="@drawable/shuffle_48" 
    fab:fab_colorNormal="@color/mm1" 
    fab:fab_colorPressed="@color/mm2" 
    fab:fab_shadow="true" 
    /> 


</FrameLayout> 
+0

добавить ListView Intitialization в вашей ** onCreate() ** перед назначением onItemClickListener в listview – Jerry

ответ

0

Попробуйте

ListView lv = getListView(); 
lv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getActivity(), "Item clicked", Toast.LENGTH_SHORT).show(); 
     } 
}); 

надеюсь, что это работает :)

0

Ваш OnItemClickListener(), как показано ниже

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
        int itm=arg0.getItemAtPosition(arg2); 
       switch (itm) { 
       case 0: 
       Toast.makeText(m_context, "Item clicked", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(getActivity(), SecondActivity.class); 
       startActivity(intent); 
        break; 
       case 1: 
        Intent intent1 = new Intent(getActivity(), SecondActivity.class); 
        startActivity(intent1); 
           break; 

     } 
    });