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();
}
感谢那些试图帮助我的人。
我正在尝试为 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();
}
感谢那些试图帮助我的人。