我正在尝试为Android实施日历。所以我有一个表示日历(gridview)的片段,我尝试通过点击网格项来更改当前片段。
所以我试图在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;
}
}
但是这不起作用,我没有任何错误,但是当我点击它时没有任何反应。我的问题与此类似:https://stackoverflow.com/questions/28026219/replace-fragment-on-click-of-grid-view-item
适配器是否可能影响onclick方法?我可以在适配器类中更改片段吗?
答案 0 :(得分:0)
如果您的Gridview
有自定义布局,那么只需将这些属性用于所有UI
控件,以便在自定义适配器类中夸大自定义布局
android:focusable="false"
android:focusableInTouchMode="false"
答案 1 :(得分:0)
我通过更改适配器类的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();
}
感谢那些试图帮助我的人。