`
irtutsk
  • 浏览: 17328 次
社区版块
存档分类
最新评论

Contextual Action Mode

阅读更多

Contextual Action Mode

实现ActionMode.Callback接口,在接口内配置ActionMode并响应action items的点击事件。在需要显示ActionMode时调用startSupportActionMode()方法。

 

两种基本的设计:

1.对个体任意views的上下文相关操作;

    调用View的setOnLongClickListener方法。

    实现OnLongClickListener接口,在接口内调用startSupportActionMode()方法。

 

2.对一组数据的批处理,比如ListView或GridView中的项目,允许用户选择多个项目然后对它们整体执行一个动作。

public class MainActivity extends ActionBarActivity {
	private ListView mListView = null;
	private String[] mStrings = { "a", "b", "c", "d" };
	private ActionMode mActionMode = null;
	private ArrayAdapter<String> Adapter0, Adapter1;
        //设置ActionMode菜单
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Adapter0 = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, mStrings);
		Adapter1 = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_multiple_choice, mStrings);
		mListView = (ListView) findViewById(R.id.listView1);
		closeEditor();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_edit) {
			if (mActionMode != null) {
				return false;
			}
			//startSupportActionMode
			mActionMode = startSupportActionMode(mActionModeCallback);
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	//ActionMode.Callback
	private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
		@Override
		public boolean onCreateActionMode(ActionMode mode, Menu menu) {
			MenuInflater inflater = mode.getMenuInflater();
			inflater.inflate(R.menu.cab, menu);
			return true;
		}

		//预处理
		@Override
		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
			//设置适配器
			mListView.setAdapter(Adapter1);
			//设置监听器
			mListView.setOnItemClickListener(new OnItemClickListener() {
				@Override
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
				}
			});
			//设置选择模式——多选
			mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
			return true;
		}

		//点击处理
		@Override
		public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
			switch (item.getItemId()) {
			case R.id.action_multiple_choice:
				showEditor();
				//关闭ContextualActionMode
				mode.finish();
				return true;
			default:
				return false;
			}
		}

		//销毁处理
		@Override
		public void onDestroyActionMode(ActionMode mode) {
			mActionMode = null;
			closeEditor();
		}
	};

	private void showEditor() {
		//得到选中的itemId
		long[] ids = mListView.getCheckItemIds();
		String str = "";
		for (int i = 0; i < ids.length; i++) {
			str += ids[i] + ",";
		}
		//输出ID
		Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
	}

	private void closeEditor() {
		//设置适配器
		mListView.setAdapter(Adapter0);
		//设置监听器
		mListView.setOnItemClickListener(new OnItemClickListener() {
			// onItemClick
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//得到选中的itemId
				String ids = id + "";
				//输出ID
				Toast.makeText(MainActivity.this, ids, Toast.LENGTH_LONG)
						.show();
			}
		});
		//设置选择模式——单选
		mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
	}
}

 

自定义样式:

使用方法同ActionBar相同,这里只给出样式属性。

"android:actionModeStyle "——ActionMode样式。

"android:actionModeBackground"——ActionMode背景。

"android:actionModeSplitBackground"——分割时底部背景(同ActionBar)。

"android:actionModeCloseButtonStyle"——取消按钮样式(就是那个对号)。


 Android2.3模拟器效果图

  • 大小: 202.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics