Listview row selection

Ola vou tentar explicar da melhor maneira a minha duvida, é o seguinte.

Tenho uma listview, quando clico em algum item ele muda de cor, mas quando deixo de clicar, ele nao fica com a cor de seleccionado.
Tambem tenho dois botoes cima e baixo, tambem gostava que conforme vou para cima ou para baixo o item seleccionado fique noutra cor.

main.java

package com.applistview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class main extends Activity {
	
	private String[] listSongs = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"};
	private ListView listView;
	private RowAdapter rowAdapter;
	private Button up;
	private Button down;
	private int pos;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        listView = (ListView) findViewById(R.id.list);
        
        listView.onTouchModeChanged(true);
        
        listView.setSelected(true);
        
        rowAdapter = new RowAdapter(this, listSongs);
        
        listView.setAdapter(rowAdapter);
        
        pos = 1;
        
        listView.setSelection(pos);
        
        up = (Button) findViewById(R.id.up);
        
        down = (Button) findViewById(R.id.down);
        
        up.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(pos >1)
					pos--;
				listView.setSelection(pos);
			}
		});
        
        down.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				int p = listView.getCount();
				if(pos<listView.getCount())
					pos++;
				listView.setSelection(pos);
			}
		});
        
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<ListView android:id="@+id/list" 
	android:layout_height="200dip" 
	android:layout_width="fill_parent"
	android:background="#FFF"
	android:cacheColorHint="#00000000">
	</ListView>
<Button android:text="Cima" 
		android:id="@+id/up" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"></Button>
<Button android:text="Baixo" 
		android:id="@+id/down" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"></Button>
</LinearLayout>

RowAdaptar.java

package com.applistview;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class RowAdapter extends BaseAdapter {
	
	Context mContext;
	private Activity activity;
	private String[] rows;
	private static LayoutInflater mInflater = null;
	
	public RowAdapter(Context context, String[] rows) {
		
		//this.activity = activity;
		this.rows = rows;
		
		mInflater = LayoutInflater.from(context);
		//this.context = context;
	}

	@Override
	public int getCount() {
		return rows.length;
	}

	@Override
	public Object getItem(int position) {
		return position;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
	
	public static class ViewHolder {
		public TextView bulletrow;
		public TextView textrow;
	}
	
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = null;
		
		if(convertView == null) {
			convertView = mInflater.inflate(R.layout.rowitem, null);
			
			viewHolder = new ViewHolder();
			viewHolder.bulletrow = (TextView) convertView.findViewById(R.id.bulletrow);
			viewHolder.textrow = (TextView) convertView.findViewById(R.id.textrow);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		
		viewHolder.textrow.setText(rows[position]);
		
		return convertView;
	}

}

rowitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rowitem"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:background="@color/list_bg"
  >
    <TextView
    	android:id="@+id/bulletrow"
    	android:layout_width="40dip"
    	android:layout_height="fill_parent"
    	android:gravity="center_horizontal|center_vertical"
    	android:text=":"
    	android:textSize="20dip" 
    	android:textStyle="bold">
    </TextView>
    <TextView 
    	android:id="@+id/textrow"
    	android:layout_width="fill_parent" 
    	android:layout_height="fill_parent"
    	android:gravity="center_vertical"
    	android:text="">
    </TextView>
</LinearLayout>

list_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
	android:state_selected="false"
    android:state_pressed="false" 
    android:drawable="@color/grey" />
<item android:state_pressed="true" 
    android:drawable="@color/blue" />
<item android:state_selected="true"
	android:state_pressed="false" 
    android:drawable="@color/blue" />
</selector>

colors.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<color name="blue">#0303ff</color>
	<color name="grey">#f7f7f7</color>
</resources>

Eu gostava de saber se tenho de fazer isso programaticamente, ou posso fazer com xml e como?

Desculpem se estou a ser chato.

Cumps[[]]

Voce tem que fazer isso pelo background da sua ViewHolder.

Obrigado, vou tentar isso.

Estava com a esperanca que houvesse algo nativo para não carregar tanto a aplicação.

Cumprimentos.

Não estou a conseguir, podes dar um exemplo por favor.

Cumprimentos

Na minah classe main tenho o seguitne codigo

up.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				int pos = listView.getPositionForView(lastView);
				
				int first = listView.getFirstVisiblePosition();
				
				if(pos != 0) {
					lastView.setSelected(false);
					
					if(pos - first -1 < 0) {
						listView.setSelection(pos - 1);
						//listView.getSelectedView().setSelected(true);
						//lastView = (View) listView.getChildAt(pos - first - 1);
					} else {
						lastView = (View) listView.getChildAt(pos - first - 1);
						lastView.setSelected(true);
					}
					
					//lastView.setSelected(true);
					
				}
			}
		});

Tenho sete linhas viviveis na minha listview, o conteudo das linhas (“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”).
Enquanto navego nessas linhas para cima e para baixo, ele entra no if como false (false) e executa este codigo

lastView = (View) listView.getChildAt(pos - first - 1);
lastView.setSelected(true);

até aqui tudo bem, mas quando estou por exemplo em B e quero ir para o A (para cima), que neste caso o A não esta visivel, tenho de fazer um

listView.setSelection(pos - 1);

para mover o scroll, só que ele so move o scroll quando terminar de executar nosso método assim que nao posso fazer

Alguem me pode ajudar, ou algum método melhor para fazer isto?

Cumprimentos.

Peço sugestões por favor…

Esta solucionado.

Obrigado.