ListView. Как сделать, что б при нажатии менлся цвет пункта?

Ответить
Petrik
Сообщения: 18
Зарегистрирован: 12 фев 2015, 18:10

ListView. Как сделать, что б при нажатии менлся цвет пункта?

Сообщение Petrik » 25 фев 2015, 10:50

Здравствуйте, как можно сделать, что б при нажатии (нажал - отпустил, не зажимал) на пункт списка, менялся его фон?
P.S. Я нуб.

Парился, парился, потом получилось "разукрашивать" весь список, далее получилось красить нужный пункт списка, но он закрашивался да же если нажимать на другие пункты.

Ещё я понял, что да же если получится его покрасить, то потом нужно как то сохранить цветной фон для этого пункта при прокрутке, а как реализовать этот момент?

[syntax=java]package com.comcom.chernovik;

import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;


public class MainActivity extends ActionBarActivity {

String[] name;

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

final ListView lvMain = (ListView) findViewById(R.id.lvMain);

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.name,
R.layout.button_list_item);

lvMain.setAdapter(adapter);

lvMain.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
long id) {
lvMain.getChildAt(2).setBackgroundColor(Color.YELLOW);
}
});
}[/syntax]

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListView. Как сделать, что б при нажатии менлся цвет пун

Сообщение rezak90 » 25 фев 2015, 12:44

Изучайте селекторы
R.id.team
Политика на форуме запрещена

Petrik
Сообщения: 18
Зарегистрирован: 12 фев 2015, 18:10

Re: ListView. Как сделать, что б при нажатии менлся цвет пун

Сообщение Petrik » 25 фев 2015, 16:53

Друзья, товарищи, знакомые, дамы и господа, напишите пожалуйста поподробней что куда прописать. Надеюсь у кого нибудь найдётся желание и время откликнуться на зов помощи!

UPD:
Создал в папке drawable файk listselector.xml

[syntax=java]<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myselector">
<item
android:state_pressed="true"
android:drawable="@color/green" />
</selector>[/syntax]

main.xml
[syntax=java]<ListView
android:id="@+id/lvMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/listselector">
</ListView>[/syntax]

Теперь когда кликаешь просто на время подсвечивается. Побывал так же вместо "android:state_pressed="true"", прописывать "android:state_focused="true"" ничего не меняется, а при "android:state_selected="true"" вообще не нажимается.

UPD2: Изменил listselector.xml на:
[syntax=java]<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myselector">
<!-- Non focused states -->
<item
android:state_focused="false"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/darkblue" />
<item
android:state_focused="false"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/green" />

<!-- Focused states -->
<item
android:state_focused="true"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/green" />
<item
android:state_focused="true"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/green" />

<!-- Pressed -->
<item
android:state_pressed="true"
android:drawable="@color/green" />
</selector>[/syntax]

Теперь при нажатии щёлкается зелёным и окрашивается в синий, но при нажатии на новый пункт окрас с предыдущего исчезает и при прокрутке цепляется к верху экрана.
Я хоть в том направлении иду?

Ответить