package com.kedzie.vbox.machine.settings; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.actionbarsherlock.app.SherlockFragment; import com.kedzie.vbox.R; import com.kedzie.vbox.app.FragmentElement; import com.kedzie.vbox.app.FragmentElementListAdapter; /** * * @author Marek Kędzierski */ public class CategoryFragment extends SherlockFragment { /** * Listener which handles selection events */ public static interface OnSelectCategoryListener { /** * Handle category selection event * @param category the selected {@link FragmentElement} */ public void onSelectCategory(FragmentElement category); } private ListView _listView; private FragmentElementListAdapter _adapter; private OnSelectCategoryListener _listener; private boolean _dualPane; @Override public void onAttach(Activity activity) { super.onAttach(activity); if(activity instanceof OnSelectCategoryListener) _listener=(OnSelectCategoryListener)activity; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); List<FragmentElement> categories = new ArrayList<FragmentElement>(); categories.add(new FragmentElement(getResources().getString(R.string.settings_general), R.drawable.ic_settings_general, GeneralFragment.class, getArguments())); categories.add(new FragmentElement(getResources().getString(R.string.settings_system), R.drawable.ic_settings_system, SystemFragment.class, getArguments())); categories.add(new FragmentElement(getResources().getString(R.string.settings_display), R.drawable.ic_settings_display, DisplayFragment.class, getArguments())); categories.add(new FragmentElement(getResources().getString(R.string.settings_storage), R.drawable.ic_settings_storage, StorageFragment.class, getArguments())); categories.add(new FragmentElement(getResources().getString(R.string.settings_audio), R.drawable.ic_settings_audio, AudioFragment.class, getArguments())); categories.add(new FragmentElement(getResources().getString(R.string.settings_network), R.drawable.ic_settings_network, NetworkFragment.class, getArguments())); _adapter = new FragmentElementListAdapter(getActivity(), categories); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { _dualPane = getActivity().findViewById(R.id.details)!=null; _listView = new ListView(getActivity()); _listView.setAdapter(_adapter); _listView.setChoiceMode(_dualPane ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE); _listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { setSelection(position); } }); return _listView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if(savedInstanceState!=null && _dualPane) { int position = savedInstanceState.getInt("checkedItem"); if(position!=ListView.INVALID_POSITION) setSelection(position); } } public void setSelection(int position) { if(_dualPane) _listView.setItemChecked(position, true); if(_listener!=null) _listener.onSelectCategory(_adapter.getItem(position)); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("checkedItem", _listView.getCheckedItemPosition()); } }