通過鍵盤的左右按鍵切換,使得目前的Item資料改變。這種用法已經超越了移動開發的範圍了...
一、先繼承一個Activity,并作相應的實作
public class MainActivity extends Activity {
private ListView mListView;
private List<Map<String, Object>> data;
private CustomAdapter listAdapter;
private String[] arrMenuItemName;
private String[] arrSwitcher;
private String[] arrOpen;
private int iDelete;
private int iSaved;
private int iOpen;
@Override
public void onCreate(Bundle savedInstanceStated) {
super.onCreate(savedInstanceStated);
setContentView(R.layout.list_view);
arrMenuItemName = this.getResources().getStringArray(R.array.menu_array);
arrSwitcher = this.getResources().getStringArray(R.array.switcher);
arrOpen = this.getResources().getStringArray(R.array.open_array);
mListView = (ListView) findViewById(R.id.list_view_id);
data = getData();
listAdapter = new CustomAdapter(this, data);
mListView.setAdapter(listAdapter);
}
//把鍵值與資料對應起來
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
for (int i = 0; i < arrMenuItemName.length; i++) {
map = new HashMap<String, Object>();
map.put("itemName", arrMenuItemName[i]);
map.put("item_0", arrSwitcher[i]);
map.put("item_1", arrSwitcher[i]);
map.put("item_2", arrOpen[i]);
list.add(map);
}
return list;
}
//響應鍵盤按鍵的左右切換
public boolean onKeyDown(int keyCode, KeyEvent event) {
int iCurrItem = mListView.getSelectedItemPosition();
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
switch (iCurrItem) {
case 0:
iSaved -= 1;
if (iSaved < 0) {
iSaved = arrSwitcher.length - 1;
}
data.get(iCurrItem).put("item_0", arrSwitcher[iSaved]);
break;
case 1:
iDelete -= 1;
if (iDelete < 0) {
iDelete = arrSwitcher.length - 1;
}
data.get(iCurrItem).put("item_1", arrSwitcher[iDelete]);
break;
case 2:
iOpen -= 1;
if (iOpen < 1) {
iOpen = arrOpen.length - 1;
}
data.get(iCurrItem).put("item_2", arrOpen[iOpen]);
break;
default:
break;
}
//檢測到listAdapter資料有變化時,便更新整個ListView
listAdapter.notifyDataSetChanged();
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
switch (iCurrItem) {
case 0:
iSaved += 1;
if (iSaved >= arrSwitcher.length) {
iSaved = 0;
}
data.get(iCurrItem).put("item_0", arrSwitcher[iSaved]);
break;
case 1:
iDelete += 1;
if (iDelete >= arrSwitcher.length - 1) {
iDelete = 0;
}
data.get(iCurrItem).put("item_1", arrSwitcher[iDelete]);
break;
case 2:
iOpen += 1;
if (iOpen >= arrOpen.length) {
iOpen = 0;
}
data.get(iCurrItem).put("item_2", arrOpen[iOpen]);
break;
}
listAdapter.notifyDataSetChanged();
break;
}
return super.onKeyDown(keyCode, event);
}
}
二、再從BaseAdapter繼承一個類并自定義
public class CustomAdapter extends BaseAdapter {
private List<Map<String, Object>> data;
private LayoutInflater mInflater;
private Context mContext = null;
public CustomAdapter(Context context, List<Map<String, Object>> getData) {
this.data = getData;
mContext = context;
mInflater = LayoutInflater.from(mContext);
}
public Object getItem(int arg0) {
return arg0;
}
public long getItemId(int position) {
return position;
}
public int getCount() {
return data.size();
}
@TargetApi(11)
public View getView(int position, View convertView,
android.view.ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_custom, null);
viewHolder.tvItemMenu = (TextView) convertView
.findViewById(R.id.menu_text_id);
viewHolder.tvSpinner = (TextView) convertView
.findViewById(R.id.spinner_text_id);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvItemMenu
.setText((String) data.get(position).get("itemName"));
switch (position) {
case 0:
viewHolder.tvSpinner.setText((CharSequence) data.get(position).get(
"item_0"));
break;
case 1:
viewHolder.tvSpinner.setText((CharSequence) data.get(position).get(
"item_1"));
break;
case 2:
viewHolder.tvSpinner.setText((CharSequence) data.get(position).get(
"item_2"));
break;
}
return convertView;
}
private class ViewHolder {
private TextView tvItemMenu;
private TextView tvSpinner;
}
}

更多的了解請下載下傳