package com.nuscomputing.ivle; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.SimpleAdapter; import com.actionbarsherlock.app.SherlockDialogFragment; /** * A dialog fragment for item details. * @author yjwong */ public class DetailsDialogFragment extends SherlockDialogFragment { // {{{ methods @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Get the fragment arguments. Bundle args = getArguments(); LinkedHashMap<?, ?> detailsMapFromBundle = (LinkedHashMap<?, ?>) args.getSerializable("items"); LinkedHashMap<String, String> detailsMap = new LinkedHashMap<String, String>(); for (Map.Entry<?, ?> detail : detailsMapFromBundle.entrySet()) { if (detail.getValue() != null) { detailsMap.put(detail.getKey().toString(), detail.getValue().toString()); } else { detailsMap.put(detail.getKey().toString(), "(none)"); } } // Create the details list. List<HashMap<String, String>> detailsList = createDetailsList(detailsMap); String dialogTitle = args.getString("title") != null ? args.getString("title") : ""; // Return a dialog. AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setIcon(R.drawable.ic_menu_info_details) .setTitle(dialogTitle) .setPositiveButton("Close", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setAdapter( new SimpleAdapter( getActivity(), detailsList, R.layout.details_dialog_fragment_list_item, new String[] { "title", "data" }, new int[] { android.R.id.text1, android.R.id.text2 } ), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do nothing. } } ) .create(); // Obtain the list view for the adapter. dialog.getListView().setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Do nothing. } }); return dialog; } /** * Method: createAdapterDetailsMap * <p> * Creates a details bundle for use with this DialogFragment. * * @param items * @return */ private List<HashMap<String, String>> createDetailsList(Map<String, String> items) { // Create the master bundle. List<HashMap<String, String>> detailsList = new ArrayList<HashMap<String, String>>(); // Iterate through each item. for (Map.Entry<String, String> item : items.entrySet()) { HashMap<String, String> detail = new HashMap<String, String>(); detail.put("title", item.getKey()); detail.put("data", item.getValue()); detailsList.add(detail); } return detailsList; } // }}} }