ListView Android - Como manter uma linha do ListView selecionada após o evento click(touch)

10 respostas
L

Olá pessoal,

Alguém sabe me dizer como eu devo fazer para manter uma linha de um ListView selecionada?

Pois no sistema que eu estou atuando o usuário poderá selecionar uma linha de uma ListView que deverá ficar selecionada até que ele acione um outro botão que iniciará uma outra Activity.

Alguém pode me ajudar?

:?: :?: :?: :?: :?:

10 Respostas

F

Você pode fazer o seguinte, quando o usuário clicar no item do listview, você atualiza ele para alguma imagem com hover (selecionada). =)

Simples?

L

Eu acabei solucionando de um outro jeito,

eu adiciono um TextView em cima da minha lista quando o usuário seleciona um ítem, imprimindo a mensagem
"Item tal selecionado", mesmo assim, valeu felipebonezi.

:smiley: :smiley: :smiley:

D

pq vc simplismente nao colore a linha é bem mais facil.

L

Bom dia danilorangelmg,

É exatamente isso que eu queria fazer, porém eu descobri que manter a seleção da linha clicada é um pouco complicado.

Você conhece uma maneira simples de se fazer isso?

D

Cara o que eu fiz foi o seguinte, eu utilizei um metodo dentro do meu adapter ond eu guardo qual é a view selecionada, é tipo assim

public void setSelectedView(View selectedView, int position) {
		this.lastPosition = position;
		
                this.selectedView = selectedView;
		this.selectedView.setBackgroundColor(Color.argb(200, 135, 206, 255));
		
	}

	public View getSelectedView() {
		return selectedView;
	}

esse metodo é chamado dentro do onListItemClick

@Override
	protected void onListItemClick(ListView listView, View view, int position, long id) {
		super.onListItemClick(listView, view, position, id);

		final DefaultListAdapter dlap = ((DefaultListAdapter)listView.getAdapter());

		int y = getListView().getScrollY();

		getListView().scrollBy(0, y);
		dlap.setSelectedView(view, position);
	}
L

Tem como vc postar como vc fez?

D

eu postei um adapter de um teste que eu fiz com um bluetooth, mais a ideia e a mesma,

public class CustomAdapter<T> extends ArrayAdapter<T> {
	private Context context;
	private List<?> domainList;
	private int layoutId;
	private List<Integer> properties;
	private View selectedView;
	private int lastPosition = -1;
	
	public CustomAdapter(Context context,int textViewResourceId,List<T> objects, List <Integer> props) {
		super(context, textViewResourceId, objects);
		this.context = context;
		this.domainList = objects;
		this.layoutId = textViewResourceId;
		this.properties = props;
		
		
	}
	
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		
		View view = null;
		LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		view = layoutInflater.inflate(this.layoutId, null);
		
		Object obj  = this.domainList.get(position); // objeto da lista
		
		for (Integer propertie : properties) {
			TextView tv = (TextView)view.findViewById(propertie);
			
			BluetoothDevice device = (BluetoothDevice) obj;
			if (propertie.equals(R.device_id.name)) {
				tv.setText(device.getName());
			} else if (propertie.equals(R.device_id.mac)) {
				tv.setText(device.getAddress());
			}
		}
		
		return view;
	}

/***
*
* este é o metodo que colore a linha da view da lista
*/
	public void setSelectedView(View selectedView, int position) {
		this.lastPosition = position;
		if (this.selectedView != null) {
			this.selectedView.setBackgroundColor(Color.WHITE);
		}
		this.selectedView = selectedView;
		this.selectedView.setBackgroundColor(Color.argb(200, 135, 206, 255));
	}
	
}

ai tipo vc cria sua listActivity normalmente, popula a lista e implementa o onListItemClick()

@SuppressWarnings({"unchecked" })
	@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    	super.onListItemClick(l, v, position, id);
		CustomAdapter<BluetoothDevice> adapter = ((CustomAdapter<BluetoothDevice>) l.getAdapter());
		adapter.setSelectedView(v, position); // essa é a chamada do metodo responsavel por colorir a linha da lista
    	
		BluetoothDevice bd = adapter.getItem(position);
		
    }
P

Veja se ajuda

private ListView    lstDados;
	private ArrayAdapter<String> adpListaCompra;

       ....
     ....
 .....
 ...........

         //Defindo o layout para o ArrayAdapter
        adpListaCompra = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice);

        lstDados.setAdapter(adpListaCompra);
        
        //Configura o modo de seleção do ListView
        lstDados.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
L

Agradeço a todos que contribuíram me ajudando a solucionar o problema.

A solução mais simples foi a do paulofafism

Muito Obrigado.

L

solução 100% perfeita para a obtenção do resultado desejado:


http://www.michenux.net/android-listview-highlight-selected-item-387.html

Criado 16 de março de 2012
Ultima resposta 24 de set. de 2012
Respostas 10
Participantes 4