По сути, вы можете просто показать свой фрагмент следующим образом:
SherlockDialogFragment newFragment = new TimePickerFragment();
newFragment.show(getActivity().getSupportFragmentManager(), "timePicker");
И это будет простой TimePickerFragment:
public class TimePickerFragment extends SherlockDialogFragment implements TimePickerDialog.OnTimeSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
}
То, что вы сказали выше, неверно:
Пользовательские действия могут быть только исполняемыми файлы. Пакетный файл не является исполняемым.
Пользовательские действия (даже без таких инструментов, как InstallShield) могут быть на основе .EXE, VBScript, JScript или DLL. Если вы пишете DLL, вы можете написать любой код, который хотите вызвать командный файл или внести какие-либо изменения в систему - ограничений нет.
Обновление : пример, который работал у меня: ( запись в таблице CustomAction)
Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>
I was able to solve this by creating an EXE consisting essentially of:
System.Diagnostics.Process.Start(pathToBatchFile);
Adding the EXE to the MSI file then running it as a custom action.