Как установить текущий рабочий каталог в каталог скрипта?

Это расширение для ответов fiddlers. Как-то onTimeChangedListener не установлен TimePickerDialog в некоторых версиях Android:

ex. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.1_r1.2/android/app/TimePickerDialog.java

Метод onTimeChanged никогда не вызывается! Лучшее решение для этой проблемы в настоящее время, возможно, для кодирования пользовательского TimePickerDialog с минимальной / максимальной логикой от скрипача.

Более уродливая работа - это. (Добавление слушателя с использованием отражений) Я также обновляю заголовок, чтобы показать текущее время.

package com.mysuger.android.dialogs;

import java.lang.reflect.Field;
import java.text.DateFormat;
import java.util.Calendar;

import android.app.TimePickerDialog;
import android.content.Context;
import android.widget.TimePicker;

/**
 * A time dialog that allows setting a min and max time.
 * 
 */
public class RangeTimePickerDialog extends TimePickerDialog {

private int minHour = -1;
private int minMinute = -1;

private int maxHour = 25;
private int maxMinute = 25;

private int currentHour = 0;
private int currentMinute = 0;

private Calendar calendar = Calendar.getInstance();
private DateFormat dateFormat;


public RangeTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
    super(context, callBack, hourOfDay, minute, is24HourView);
    currentHour = hourOfDay;
    currentMinute = minute;
    dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

    try {
        Class superclass = getClass().getSuperclass();
        Field mTimePickerField = superclass.getDeclaredField("mTimePicker");
        mTimePickerField.setAccessible(true);
        TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);
        mTimePicker.setOnTimeChangedListener(this);
    } catch (NoSuchFieldException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    }
}

public void setMin(int hour, int minute) {
    minHour = hour;
    minMinute = minute;
}

public void setMax(int hour, int minute) {
    maxHour = hour;
    maxMinute = minute;
}

@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

    boolean validTime = true;
    if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)){
        validTime = false;
    }

    if (hourOfDay  > maxHour || (hourOfDay == maxHour && minute > maxMinute)){
        validTime = false;
    }

    if (validTime) {
        currentHour = hourOfDay;
        currentMinute = minute;
    }

    updateTime(currentHour, currentMinute);
    updateDialogTitle(view, currentHour, currentMinute);
}

private void updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) {
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    String title = dateFormat.format(calendar.getTime());
    setTitle(title);
}
 }

465
задан PHPirate 29 October 2018 в 14:51
поделиться

3 ответа

#!/bin/bash
cd "$(dirname "$0")"
580
ответ дан 22 November 2019 в 22:38
поделиться

Мне кажется, этот сценарий работает:

#!/bin/bash
mypath=`realpath $0`
cd `dirname $mypath`
pwd

Командная строка pwd отображает расположение сценария как текущий рабочий каталог, независимо от того, откуда я его запустил.

3
ответ дан 22 November 2019 в 22:38
поделиться

Получите реальный путь к вашему сценарию

if [ -L $0 ] ; then
    ME=$(readlink $0)
else
    ME=$0
fi
DIR=$(dirname $ME)

(Это ответ на тот же мой вопрос здесь: Получите имя каталога, в котором выполняется сценарий )

2
ответ дан 22 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: