Android ListView上的ContextMenu

我們常常會遇到這種需求——在一個列表的一項上加上修改、刪除、標記等的操作,最常用的手法自然是長按這一項來彈出一個ContextMenu來提供這些功能了。但是有一個很重要的問題——如何獲得當前列表上的位置呢?這個listview的contextMenu上的位置是一個比較隱蔽的屬性,下面我通過一個小例子來說明。

首先,是這個Activity聲明部分,這個很簡單,就是一個ListView,然後給其註冊一個ContextMenu。

public class PwdListActivity extends Activity implements OnClickListener {

	private ListView listv;
	private BaseAdapter adapter;
	private List<account> accountlist;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_pwdlist);
		
		listv = (ListView) findViewById(R.id.listview);
		
		listv.setOnItemClickListener(new MonItemClickListener());
		registerForContextMenu(listv);
	}

然後我們要寫這個ContextMenu的創建和點擊方法。

@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		getMenuInflater().inflate(R.menu.pwditem_menu, menu);
		super.onCreateContextMenu(menu, v, menuInfo);
	}

到這裏都和普通的ContextMenu無異,下面是其選擇方法——

@Override
	public boolean onContextItemSelected(MenuItem item) {
		int position=((AdapterContextMenuInfo) item.getMenuInfo()).position;
		account acc=accountlist.get(position);
		switch (item.getItemId()) {
		case R.id.edit:
			Intent inedit = new Intent(this, EditAccoutActivity.class);
			inedit.putExtra("edit", acc.getId());
			startActivity(inedit);
			break;
		case R.id.delete:
			Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("確定刪除?").setMessage("點擊確定刪除該賬戶信息")
					.setPositiveButton("確定", new MPositiveOnClickListener(acc))
					.setNegativeButton("取消", null);
			builder.create().show();
			break;
		case R.id.viewpwd:
			String shadow = acc.getShadow();
			ToastUtils.show(PwdListActivity.this, AES.dec(shadow));
			break;
		default:
			break;
		}
		return super.onContextItemSelected(item);
	}

這個方法最重要的是方法體第一行,ListView上的MenuInfo可以通過強轉成AdapterContextMenuInfo來提取其成員變量position,而這個position指示的正是當前item對應listview中的位置,有此方法,我們的功能就能很方便地實現了。剩下的代碼就不貼了^_^因爲重點已經出來了~


發佈了41 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章