Сопоставление с образцом и значения заполнителя

Добавьте это в ваш класс HAdapter

private View.OnKeyListener mOnKeyListener = new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
       RecyclerView rv = (RecyclerView) v.getParent();
       if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
           rv.getLayoutManager().scrollToPosition(0);
       }          
       return false;
    }
};

и

itemView.setOnKeyListener(mOnKeyListener);

в метод onCreateViewHolder вашего класса HAdapter.

Это только для клавиши «Стрелка вверх», вы можете расширить предложение if, чтобы включить клавишу «Стрелка вниз».

Редактировать:

Кроме того, вы можете поместить это в предложение if вместо вызова метода scrollToPosition:

private View.OnKeyListener mOnKeyListener = new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        RecyclerView rv = (RecyclerView) v.getParent();
        if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
           int pos = rv.getLayoutManager().getPosition(v);
           rv.scrollBy(-((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, pos * width, mContext.getResources().getDisplayMetrics())), 0);
        }          
        return false;
    }
};

где width - это ширина RecyclerView пункт (ы) в дп.

Предложение:

Я бы переместил методы setAdapter и setLayoutManager из класса ViewHolder в тело класса HAdapter. (Сделайте то же самое в классе VAdapter). Они не имеют ничего общего с шаблоном ViewHolder. Шаблон ViewHolder используется для оптимизации производительности путем кэширования представлений, возвращаемых findViewById ()

Редактировать 2:

Добавить этот класс в ваш проект:

https://raw.githubusercontent.com/wuakitv/leanback-v17/master/src/android/support/v17/leanback/widget/PersistentFocusWrapper.java

Затем измените свой v_item_view .xml:





    


Я проверил это, и оно работает.

7
задан Wiktor Stribiżew 8 October 2019 в 23:38
поделиться

5 ответов

Самый легкий должен был бы заменить каждого %Label% с (?<Label>.*?), и выйдите из любых других символов.

%Artist%-%Album%-%Track%-%Title%.mp3

становится

(?<Artist>.*?)-(?<Album>.*?)-(?<Track>.*?)-(?<Title>.*?)\.mp3

Вы затем получили бы каждый компонент в именованные группы получения.

Dictinary<string,string> match_filename(string rule, string filename) {
    Regex tag_re = new Regex(@'%(\w+)%');
    string pattern = tag_re.Replace(Regex.escape(rule), @'(?<$1>.*?)');
    Regex filename_re = new Regex(pattern);
    Match match = filename_re.Match(filename);

    Dictionary<string,string> tokens =
            new Dictionary<string,string>();
    for (int counter = 1; counter < match.Groups.Count; counter++)
    {
        string group_name = filename_re.GroupNameFromNumber(counter);
        tokens.Add(group_name, m.Groups[counter].Value);
    }
    return tokens;
}

Но если пользователь не учитывает разделители, или если разделители могли бы содержаться в полях, Вы могли бы получить некоторые странные результаты. Шаблон был бы для %Artist%%Album% стал бы (?<Artist>.*?)(?<Album>.*?) который эквивалентен .*?.*?. Шаблон не знал бы, где разделить.

Это могло быть решено, если Вы знаете формат определенных полей, таких как номер дорожки. Если Вы переводите %Track% кому: (?<Track>\d+) вместо этого, шаблон знал бы, что любые цифры в имени файла должны быть Track.

3
ответ дан 7 December 2019 в 14:39
поделиться

Не ответ на вопрос Вы спросили, но библиотека чтения тега ID3 могла бы быть лучшим способом сделать это при использовании MP3s. Быстрый Google придумал: Библиотека C# ID3.

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

Иначе на трудное предположение походит делать базирующимся только на нескольких строках в имени файла... Вы могли попросить, чтобы пользователь также ввел выражение соответствия для имени файла, которое описывает порядок полей?

1
ответ дан 7 December 2019 в 14:39
поделиться

Имена файлов в Вашем примере кажутся довольно последовательными мне. Можно просто сделать строку. Разделение () и добавляет каждый элемент полученного массива к согласно данным меток.

Предположение, которое - положение, какие данные меток включили бы ТОННЫ эвристики.

Папки Btw., которые содержат файлы песни обычно, имеют некоторый шаблон на свое имя также, f.e.

1998 - Семь

1999 - Перископ

2000 - CO2

Формат здесь является %Year % - %AlbumName %, который мог бы помочь Вам определить, какой элемент в имени файла является альбомом.

0
ответ дан 7 December 2019 в 14:39
поделиться

Для разъяснения у меня ДЕЙСТВИТЕЛЬНО есть шаблон для соответствия именам файлов против.

Я не знаю имени файла или шаблона заранее, это - все время выполнения.

Шаблон:

%Artist%-%Album%-%Track%-%Title%.mp3

Имена файлов:

Kraftwerk-Kraftwerk-01-RuckZuck.mp3
Kraftwerk-Autobahn-01-Autobahn.mp3
Kraftwerk-Computer World-03-Numbers.mp3

Ожидаемый результат:

Artist    Album          Track Title
Kraftwerk Kraftwerk      01    RuckZuck
Kraftwerk Autobahn       01    Autobahn
Kraftwerk Computer World 01    Numbers

Снова, формат и имена файлов являются не всегда тем же.

0
ответ дан 7 December 2019 в 14:39
поделиться

Я записал файл renamer---RenameWand---командной строки, который делает вид сопоставления с образцом, которое Вы описываете. Это находится в Java, хотя, но я думаю, часть исходного кода и документации использования может представлять интерес для Вас. Простой пример того, что может сделать программа:

Исходный шаблон (указан пользователями):

<artist>-<album>-<track>-<title>.mp3

Целевой шаблон (указан пользователями):

<title.upper>-<3|track+10>-<album.lower>-<artist>.mp3

Исходное имя файла:

Kraftwerk-Computer World-03-Numbers.mp3

Переименованное имя файла:

NUMBERS-013-computer world-Kraftwerk.mp3
0
ответ дан 7 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

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