Страница 1 из 1

ListView setOnClickItemListener

Добавлено: 24 июл 2015, 14:35
arturba
Проблема!!! Когда я нажимаю первий итем мне откриваеться новий клас и меняеться заставка и цвет текста но после нажатия первого Итема меняється цвет заставки и цвет текста на каждом 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);
    }


    }

Помогите пожалуйста!!!

Re: ListView setOnClickItemListener

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

Re: ListView setOnClickItemListener

Добавлено: 24 июл 2015, 20:19
Dark67
Потому что вьюхи в ListView переиспользуются.

Re: ListView setOnClickItemListener

Добавлено: 25 июл 2015, 22:36
arturba
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>

Re: ListView setOnClickItemListener

Добавлено: 26 июл 2015, 09:41
Dark67
[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. Таким образом, при отображении нового элемента списка, нужно восстанавливать начальное состояние вьюхи, которая его отображает).

Re: ListView setOnClickItemListener

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