is not only in the form of a custom Adapter to solve ? seemingly can not be used SimpleAdapter.
Here is the specific code to display has been displayed , the focus moves have no problem, but there is no way to do a start when he set a certain item of focus , seeking advise how to do this ? Also , set the selector is also invalid , do not know why.
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);
}
}
------ Solution ------------------------------------- -------
constructor inside plus positional parameters , new MyAdapter (context, list, int); int parameters via adapter class which implements the function you want
----- - Solution --------------------------------------------
getView the position parameter is the number of rows , you judge the value of position , set the color is not on the line ?
if (position == ***)
convertView.setBackgroundColor (0xffff00);
------ reference ----------------------------- ----------
thank two , has been resolved.
没有评论:
发表评论