Android : 网格视图项目点击更改片段

Android : Change fragment on grid view item click

我正在尝试为 Android 实施日历。所以我有一个代表日历的片段(一个网格视图),我尝试通过单击网格中的一个项目来更改当前片段。

所以我尝试在 gridview 上放置一个 setOnItemClickListener :

 public class CalendarFragment extends Fragment implements View.OnClickListener { 
    private GridView calendarView;
    private GridCellAdapter adapter;  

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

        View rootView = inflater.inflate( R.layout.fragment_calendar, container, false );        

        calendarView = (GridView) rootView.findViewById( R.id.calendar );
        calendarView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick( AdapterView<?> parent, View view, int position, long id ) {
                Fragment fragment = new DayCalendarFragment();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction().replace( R.id.frame_container, fragment )
               .addToBackStack( null ).commit();

            }
        } );

        adapter = new GridCellAdapter( getActivity(), R.id.calendar_day_gridcell, month, year );
        adapter.notifyDataSetChanged();
        calendarView.setAdapter( adapter );

        return rootView;
   }
}

但这不起作用,我没有任何错误,但是当我点击它时没有任何反应。我的问题与此类似:

适配器会不会影响onclick方法?我可以更改适配器内的片段吗 class?

如果您的 Gridview 有自定义布局,那么只需将这些属性用于所有 UI 自定义布局控件,这些控件在您的自定义适配器中膨胀 class

 android:focusable="false"
 android:focusableInTouchMode="false"

我通过更改适配器 class 的 onClick 方法中的片段解决了我的问题。

这是我修改的代码:

在 CalendarFragment 中,我删除了 setOnItemClickListener 并将 FragmentManager 作为适配器构造函数的参数:

adapter = new GridCellAdapter( getActivity(), R.id.calendar_day_gridcell, month, year, getFragmentManager() );

在 GridCellAdapter 中:

@Override
public void onClick( View view ) {
    fragmentManager.beginTransaction().replace( R.id.frame_container, new DayCalendarFragment() )
    .addToBackStack( null )
    .commit();        
}

感谢那些试图帮助我的人。