Android之ListView+BaseAdapter左右按键切换

本文介绍了一种通过键盘左右按键切换项数据的方法,适用于移动开发场景。通过继承Activity并实现相应功能,结合自定义适配器,实现了数据的实时更新。此方法不仅限于移动开发,也可用于桌面应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过键盘的左右按键切换,使得当前的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;
	}
}

更多的了解请下载








                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值