要实现一个电视菜单,里面有四行,每一行有两个TextView和一个ProgressBar,是不是只能使用自定义Adapter的形式来解决? 貌似不能用SimpleAdapter。下面是具体代码,显示已经显示出来了,焦点移动也没问题,但是就是没办法做到一开始的时候就设置某一个item为焦点,求指教怎么做到这点?  另外, 设置selector也无效,不知道为什么。
public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater;
private List<Map<String, Object>> mData;
private ViewHolder holder;
private TextView tView; public MyAdapter(Context context, List<Map<String, Object>> data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
} @Override
public int getCount() {
return mData.size();
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {

if (mData.get(position).get("type") == "text only") {
if(convertView == null){
convertView = mInflater.inflate(R.layout.text,null);
tView = (TextView) convertView.findViewById(R.id.tvMain);
convertView.setTag(tView);
}else{
tView = (TextView) convertView.getTag();
}
//赋值
tView.setText(mData.get(position).get("title").toString());
} else {
if (convertView == null) {
holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.pcsettings, null);
holder.setTvTitle((TextView) convertView
.findViewById(R.id.tvTitle));
holder.setPbProgressBar((ProgressBar) convertView
.findViewById(R.id.progressBar));
holder.setTvValue((TextView) convertView
.findViewById(R.id.tvValue)); convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 给每一行赋值
holder.getTvTitle().setText(
mData.get(position).get("title").toString());
holder.getPbProgressBar().setProgress(
Integer.parseInt(mData.get(position).get("position")
.toString()));
holder.getTvValue().setText(
mData.get(position).get("position").toString()); }
return convertView;
}}public class PCSettings extends ListActivity {
private List<Map<String, Object>> mData;
//自定义的Adapter类
private MyAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); this.getWindow().setLayout(800, 400);
mData = getData();
         adapter = new MyAdapter(this,mData);
setListAdapter(adapter); getListView().setOnItemClickListener(listener);

}

AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
System.out.println(mData.get(arg2).get("title"));
} };

private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("type", "text only");
map.put("title","自动调整" );
list.add(map);
map = new HashMap<String, Object>();
map.put("type", null);
map.put("title","hpos" );
map.put("position", 60);
list.add(map);
map = new HashMap<String, Object>();
map.put("type", null);
map.put("title","vpos" );
map.put("position", 40);
list.add(map);
map = new HashMap<String, Object>();
map.put("type", null);
map.put("title","phase" );
map.put("position", 30);
list.add(map);
map = new HashMap<String, Object>();
map.put("type", null);
map.put("title","clock" );
map.put("position", 20);
list.add(map);
return list;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_J:
keyCode = KeyEvent.KEYCODE_DPAD_UP;
return getListView().onKeyDown(keyCode, event);
case KeyEvent.KEYCODE_K:
keyCode = KeyEvent.KEYCODE_DPAD_DOWN;
return getListView().onKeyDown(keyCode, event);
default:
break;
}
return super.onKeyDown(keyCode, event);
}
}listview adapter