изменить цвет фона элемента списка при нажатии

1

мое приложение содержит ListView, и когда пользователь нажимает на один из элементов, выбранный цвет элемента меняется на другой цвет. Я воспользовался этим, добавив этот android:listSelector="@android:color/darker_gray" в моем ListView, расположенном в файле activity_main.xml. Это именно то, что я ищу, но у меня проблемы с ним, потому что цвет фона также изменяется, когда пользователь удерживает элемент, но не нажимает на него. поэтому мне было интересно, был ли очень простой способ, которым я мог бы поместить этот код: android:listSelector="@android:color/darker_gray" внутри моего метода OnItemClick. таким образом, когда щелкнут элемент из моего списка, я хочу, чтобы выбранный фон фона изменился. также я НЕ хочу переупорядочить свой список и поставить выбранные элементы сверху, я просто хочу, чтобы все элементы, которые пользователь нажал, имели другой цвет фона, поэтому я хочу поместить кодировку внутри onItemClick. В настоящее время я использую default_list_item_1 по умолчанию для моего ListView.

Дополнительная информация о приложении: это своего рода учебное приложение, в котором пользователю представлен список имен учебников. когда пользователь нажимает на имена, он загружает поточную ссылку, поэтому пользователь может просто передать ее в приложение (это уже сделано). Я также добавил сообщение тоста, которое показывает, когда пользователь нажимает на ссылки, доступные потоку (это похоже на то, что я хочу получить вместо тоста, оно меняет цвет фона выбранного элемента на darker_grey). я смог сделать все это внутри if-statements. например:

Внутри OnCreate()

String[] Tutorial = getResources().getStringArray(R.array.Tutorial);
spinner1 = (ListView) findViewById(R.id.spinner1);
spinner1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Tutorial));
spinner1.setOnItemClickListener(new OnItemClickListener() 
{
    public void onItemClick(AdapterView<?> parent, View v, int pos, long id) 
    {
        if(pos==0)
        {
            // Do nothing       
        }
        else if(pos==1)
        {
            Intent i = new Intent();
            i.setAction(Intent.ACTION_VIEW);
            Uri uri = Uri.parse("https://download846.mediafire.com/8cfxi4026iog/x4ywqe8dc8u2r4f/Hetalia+Season+1+Episode+1.mp4"); /* this is a random link to show you that my programing so far works(Enter link to the selected tutorial here)*/
            i.setDataAndType(uri, "video/*");
            try {
                startActivity(i);
            } catch (ActivityNotFoundException e) {
                 // Handle exception
            } catch (Exception e) {
                // Handle exception 
            }
        Toast.makeText(parent.getContext(), parent.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show();       
        // android:listSelector="@android:color/darker_gray"
        }           
    }           
}

если вы все еще не понимаете, что я имел в виду, есть приложение в магазине googlePlay под названием Anime Plus TV, которое делает что-то похожее на то, что я имел в виду. в приложении, когда вы нажимаете на эпизод сериала (пример: Наруто), он загружает ссылку на поток эпизода, а также меняет цвет текста этого выбранного эпизода, чтобы, когда пользователь заканчивает просмотр эпизода, он не будет смущенный о том эпизоде, который он наблюдал, поскольку некоторые потоковые ссылки действительно не дают вам настоящего названия видео, где вы смотрите. но в отличие от них я просто хочу, чтобы фон выбранного учебника изменился

  • 0
    Вы должны создать собственный просмотр списка
Теги:
listview
android-listview

1 ответ

5

У вас есть два варианта.

1.progamatically: в этом случае, когда вы устанавливаете OnItemClickListener для своего ListView, получите дочерний элемент и setBackground для него.

        String[] inputs = {"test1","test2","test3"};
    final ListView l = (ListView)findViewById(R.id.listview);
    l.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,inputs));
    l.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,
                long id) {
            l.getChildAt(position).setBackgroundColor(android.R.color.black);
        }
    });

Вы можете определить цвета в файле color.xml в папке res/values (создать его, если у вас его нет) и использовать их как R.color.gray (пример) вместо android.R.color.black.

2.Использование Custom listSelector

в папке drawable создайте listselector.xml. В listselector вы можете обрабатывать разные состояния так:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Selector style for listrow -->
    <item 
        android:state_selected="false"
        android:state_pressed="false" 
        android:drawable="@drawable/test1" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/test2" />
    <item android:state_selected="true"
        android:state_pressed="false" 
        android:drawable="@drawable/test3" />
    </selector>

для вашего дела я думаю, что использование первого пути является лучшим. спросите, есть ли у вас другие вопросы :)

  • 0
    используя первый параметр и добавив: l.getChildAt (position) .setBackgroundColor (android.R.color.black); к моему программированию выдает ошибку на android.R.color.black
  • 1
    добавьте эту строку перед вашим классом: @SuppressLint ("ResourceAsColor").
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню