Android:在网格视图项目上单击更改片段

时间:2015-01-28 09:20:28

标签: java android gridview android-fragments

我正在尝试为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方法?我可以在适配器类中更改片段吗?

2 个答案:

答案 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();        
}

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