Как перехватывать прерывания, генерируемые TimeConstrained?

Система Mathematica имеет функцию StartAbort , которая позволяет перехватывать и обрабатывать генерируемые пользователем и программные Abort s. Но он не позволяет перехватывать прерывания, создаваемые такими функциями, как TimeConstrained и MemureConstrained :

TimeConstrained[CheckAbort[Pause[100], Print["From CheckAbort"]], 1]

(не печатает «From StartAbort» ).

Есть ли способ уловить такие прерывания в Mathematica ?

EDIT: Я знаю, что третий аргумент TimeConstrained и MemureConstrained позволяет оценить некоторый код в случае прерывания, но это не то, что мне нужно: мне нужен способ обработки таких прерываний полностью внутри моей функции, позволяющий пользователю не заботиться о его внутренних устройствах.

P.S. Причина, по которой это необходимо, заключается в том, что у меня есть функция, которая создает объекты MathLink , которые должны быть закрыты в случае любых прерываний или прерываний, но не в других случаях.

-121--1751159-

Создание таблицы/сетки с замороженным столбцом и замороженными заголовками Я работаю над небольшим приложением для Android. Часть того, что мне нужно для этого приложения для Android, это иметь сетку, которая как горизонтально, так и вертикально прокручивается. Однако крайнюю левую колонку необходимо заморозить (...

Я работаю над небольшим приложением для Android. Часть того, что мне нужно для этого приложения для Android, это иметь сетку, которая как горизонтально, так и вертикально прокручивается. Однако крайний левый столбец должен быть заморожен (всегда на экране и не является частью горизонтальной прокрутки). Аналогично, строка верхнего заголовка должна быть заморожена (не является частью вертикальной прокрутки)

Этот картинный, надеюсь, опишет это ясно, если это не имеет большого смысла:

Example of what I would like to do

Клавиша :

  1. Белый: Не прокручивать вообще
  2. Синий: прокручивать по вертикали
  3. Красный: прокручивать по горизонтали
  4. Фиолетовый: прокручивать как по вертикали, так и по горизонтали

Тем не менее, у меня проблемы с тем, чтобы оба этих измерения работали. (то есть, я могу получить нижнюю часть, чтобы быть всем синим, или я могу получить правую часть, чтобы быть всем красным, но не полностью, как выше) Код у меня ниже, и в основном будет производить следующее:

What I have!

result _ grid.xml:



    
        
            
                

                

                    
                
            
        
    

    
        

Код Java:

private boolean showSummaries;

private TableLayout summaryTable;
private TableLayout frozenTable;
private TableLayout contentTable;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.result_grid);

    Button backButton = (Button)findViewById(R.id.backButton);
    frozenTable = (TableLayout)findViewById(R.id.frozenTable);
    contentTable = (TableLayout)findViewById(R.id.contentTable);

    ArrayList content;

    // [Removed Code] Here I get some data from getIntent().getExtras() that will populate the content ArrayList
    PopulateMainTable(content);
}

private void PopulateMainTable(ArrayList content) {
    // [Removed Code] There is some code here to style the table (so it has lines for the rows)

    for (int i = 0; i < content.size(); i++){
        TableRow frozenRow = new TableRow(this);
            // [Removed Code] Styling of the row
        TextView frozenCell = new TextView(this);
        frozenCell.setText(content.get(i)[0]);
        // [Removed Code] Styling of the cell
        frozenRow.addView(frozenCell);
        frozenTable.addView(frozenRow);

        // The rest of them
        TableRow row = new TableRow(this);
        // [Renoved Code] Styling of the row
        for (int j = 1; j < content.get(0).length; j++) {
            TextView rowCell = new TextView(this);
            rowCell.setText(content.get(i)[j]);
            // [Removed Code] Styling of the cell
            row.addView(rowCell);
        }

        contentTable.addView(row);
    }
}

Вот как он выглядит:

Look, headers!

Вот как он выглядит при небольшой горизонтальной прокрутке

Bah, no headers!

Вот как он выглядит при вертикальной прокрутке, обратите внимание, что вы теряете заголовки! Это проблема!

Две последние вещи!

Во-первых, я не могу поверить, что это уже где-то не существует. (У меня нет Android, поэтому я не мог искать приложения, которые могут это сделать). ОднакоЯ искал как минимум два дня в StackOverflow и в Интернете в поисках решения для GridView или TaureLayout, которое обеспечит мне то, что я хотел бы сделать, и еще не нашел решения. Как бы мне ни было неловко за то, что я пропустил его, если кто-то знает о ресурсе, который описывает, как это сделать, я был бы благодарен!

Во-вторых, я попытался «принудить» к этому решению, так как добавил два LinearLayout, один из которых захватывал часть «Header» сетки, которую я хочу создать, и другой для нижней части «content» сетки, которую я хочу создать. Я могу опубликовать этот код, но это уже довольно долго, и я надеюсь, что то, что я имею в виду, очевидно. Это частично сработало , но проблема здесь в том, что заголовки и столбцы содержимого никогда не выстраивались. Я хотел использовать getWidth () и setMinimumWidth () для TextViews в пределах TaureRows, но, как описано здесь , эти данные были недоступны во время onCreate (и также были недоступны в пределах onPostCreate). Я не смог найти способ, чтобы это сработало, и решение в этой области также было бы замечательным!

Если вы сделали это так далеко до конца, кудос вам!

18
задан Community 23 May 2017 в 12:25
поделиться