ListView setOnClickItemListener

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
arturba
Сообщения: 13
Зарегистрирован: 23 янв 2015, 16:48

ListView setOnClickItemListener

Сообщение arturba » 24 июл 2015, 14:35

Проблема!!! Когда я нажимаю первий итем мне откриваеться новий клас и меняеться заставка и цвет текста но после нажатия первого Итема меняється цвет заставки и цвет текста на каждом 11 Итеме почему ето так?? мой код:

Код: Выделить всё


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.plan);

        format1 = new SimpleDateFormat("E dd.MM");
        calendar = Calendar.getInstance();

        final String[] day = new String[365];


        for (int i = 0; i < 365; i++) {


            day[i] = "  " + format1.format(calendar.getTime()) + "    " + (i+1) + "  " + getResources().getString(R.string.day);
            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }

        lv1 = (ListView) findViewById(R.id.listView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this, R.layout.button, day);

        lv1.setAdapter(adapter);
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                ((TextView) view).setTextColor(Color.BLACK);
                (view).setBackgroundResource(R.drawable.redcolor);
                ShowHTML("file:///android_asset/" + (l + 1) + ".htm", view);
            }
        });


    }

    public void ShowHTML(String AFilePath, View view) {
        Intent intent = new Intent(view.getContext(), citania.class);
        intent.setData(Uri.parse(AFilePath));
        startActivity(intent);
    }


    }

Помогите пожалуйста!!!
Вложения
Screenshot_2015-07-24-13-31-10.png
Screenshot_2015-07-24-13-31-10.png (279.68 КБ) 3318 просмотров
Screenshot_2015-07-24-13-04-05.png
Screenshot_2015-07-24-13-04-05.png (269.28 КБ) 3318 просмотров

Sasha2dx
Сообщения: 51
Зарегистрирован: 10 апр 2015, 23:24

Re: ListView setOnClickItemListener

Сообщение Sasha2dx » 24 июл 2015, 18:03

А хз, хардкор какой то.) Для начала, фон для итемов стоит присваивать через хмл, в том числе и для итемов при нажатии, вот пример: http://stackoverflow.com/a/16976534/4940600
А там глядишь и понятнее станет....

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: ListView setOnClickItemListener

Сообщение Dark67 » 24 июл 2015, 20:19

Потому что вьюхи в ListView переиспользуются.

Аватара пользователя
arturba
Сообщения: 13
Зарегистрирован: 23 янв 2015, 16:48

Re: ListView setOnClickItemListener

Сообщение arturba » 25 июл 2015, 22:36

Sasha2dx писал(а):А хз, хардкор какой то.) Для начала, фон для итемов стоит присваивать через хмл, в том числе и для итемов при нажатии, вот пример: http://stackoverflow.com/a/16976534/4940600
А там глядишь и понятнее станет....
Пожалуйста а можете мне написать конкретно чтоби запоминало ето нажатие я пробовал но ниче не получаеться когда нажимаю кнопка становиться красной но когда нажимаю назад все опять зеленое :(

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/buttoncolor" />
<item android:state_selected="false" android:drawable="@drawable/redcolor" />


</selector>

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: ListView setOnClickItemListener

Сообщение Dark67 » 26 июл 2015, 09:41

[syntax=xml]
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/buttoncolor" />
<item android:state_selected="false" android:drawable="@drawable/redcolor" />


</selector>[/syntax]

Это StateList! Он описывает внешний вид компонента взависимости от состояния (нажато, выбрано и тп). Этим проблему не решить. Я уже написал направление куда копать - в ListView вьюхи переиспользуются (то есть их создается такое количество, чтобы они поместились на экране и далее, при прокрутке списка, будут использоваться те же самые View. Таким образом, при отображении нового элемента списка, нужно восстанавливать начальное состояние вьюхи, которая его отображает).

Sasha2dx
Сообщения: 51
Зарегистрирован: 10 апр 2015, 23:24

Re: ListView setOnClickItemListener

Сообщение Sasha2dx » 27 июл 2015, 06:31

А, я не правильно понял проблему. По моему, подобное нельзя реализовать используя arrayAdapter. Хотя хз, я его скипнул. :mrgreen:
Я бы для этого сделал кастомный адаптер на основе BaseAdapter'a, и ещё где то хранил массив булеанов, с инфой какая запись кликнута а какая нет. Как сделать такой адаптер расказывается то ли в 52 то ли в 54 уроке. Может есть способы и получше, я на истинность не претендую. Если будет не понятно то мб добавлю пример от себя

Ответить