要实现一个电视菜单,里面有四行,每一行有两个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
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
解决方案 »
- 读取当前ImageView的图像
- 获取设备缓存freeStorageAndNotify的long参数的含义
- View view = inflater.inflate(R.layout.imageswitch, null);老是报错!在线求大神
- 全屏时重开关电源后全屏失效,如何解决!?
- 写了个Android通过Socket(TCP/IP)与PC通讯的程序,但是后台始终收不到啊,求大牛指导
- 串口触摸屏驱动
- 安卓开发资料推荐?
- android源码中AlertController.AlertParams问题
- 寻找学习代码
- 急急急急要用安卓做一个效果和下图类似的筛选按钮,哪位大佬可以指点一下思路,如果有时间说的详细一些就更好了
- android divideMessage 的问题?
- intent打开“geo”格式的东西出错
if (position == ***)
convertView.setBackgroundColor(0xffff00);