以上就是给各位分享在附加到NotifyIcon的ContextMenu中延迟单击事件,同时本文还将给你拓展和之间的区别、android–onCreateContextMenu使用ContextMenu
以上就是给各位分享在附加到NotifyIcon的ContextMenu中延迟单击事件,同时本文还将给你拓展
- 在附加到NotifyIcon的ContextMenu中延迟单击事件
和 之间的区别 - android – onCreateContextMenu使用ContextMenuInfo的null值调用
- android.view.ContextMenu.ContextMenuInfo的实例源码
在附加到NotifyIcon的ContextMenu中延迟单击事件
我正在为一个应用程序的插件(使用System.ComponentModel.Composition )在Windows UI的通知区域中放置一个图标。
trayMenu.MenuItems.Clear(); // Create context menu items foreach( IJob job in jobs ) { MenuItem menuItem = new MenuItem( job.Name ) {Tag = job}; menuItem.Click += MenuItemClick; trayMenu.MenuItems.Add( menuItem ); } private void MenuItemClick( object sender,EventArgs e ) { // ... }
现在,当我点击该图标上下文菜单中的一个项目时, Click处理程序没有被调用。
有趣的是,当我再次右键单击图标(单击菜单项后)先前单击的MenuItem的Click处理程序被调用。 左键单击或hover在图标上不会触发此步骤。
到底是怎么回事?
更新 :我有一个强烈的感觉,我的问题与这个问题有关 。 但我仍然试图找出如何将其应用到我的插件/应用程序。
为什么Windows 7不能加载PresentationFramework.Aero2程序集?
如何使用电源pipe理function(PowerEnuimerate)获取电源设置
如何以编程方式检测来自Windows 2003服务器的无线networking设备的密码types和encryption级别
.net 2.0 Windows应用程序需要提升uac权限
屏幕保护程序仍然必须安装到System32?
在Windows中对程序进行基准testing的最佳方式是什么?
简单的CRUD使用WPF和数据绑定
是什么让我的计时器跑不准?
.NET与Windows RT蓝牙LE API – 重新启动Windows后无法读取或写入设备
我怎样才能得到一个服务来请求重启?
我的理解是这个问题是NotifyIcon没有处理窗口消息(或者至少没有我喜欢/需要的消息)。
我通过从Form继承并为我的插件运行另一个消息泵来解决问题。
using System; using ... namespace JobTracker.Tray { [Export( typeof( IJobTrackerPlugin ) )] public class TrayPlugin : Form,IJobTrackerPlugin { #region Plugin Interface [Import( typeof( IJobTracker ) )] #pragma warning disable 649 private IJobTracker _host; #pragma warning restore 649 private IJobTracker Host { get { return _host; } } public void Initialize() { trayMenu = new ContextMenu(); trayMenu.MenuItems.Add( "Exit",OnExit ); trayIcon = new NotifyIcon(); trayIcon.Icon = new Icon( SystemIcons.Application,32,32 ); trayIcon.ContextMenu = trayMenu; // Show the proxy form to pump messages Load += TrayPluginLoad; Thread t = new Thread( () => { ShowInTaskbar = false; FormBorderStyle = FormBorderStyle.None; trayIcon.Visible = true; ShowDialog(); } ); t.Start(); } private void TrayPluginLoad( object sender,EventArgs e ) { // Hide the form Size = new Size( 0,0 ); } #endregion private NotifyIcon trayIcon; private ContextMenu trayMenu; private void OnExit( object sender,EventArgs e ) { Application.Exit(); } #region Implementation of Idisposable // ... private void dispoSEObject( bool disposing ) { if( _disposed ) { return; } if( disposing ) { // dispose managed resources. if( Invokerequired ) { EndInvoke( BeginInvoke( new MethodInvoker( Close ) ) ); } else { Close(); } trayIcon.dispose(); trayMenu.dispose(); } // dispose unmanaged resources. _disposed = true; } #endregion } }
似乎很好。
<context:annotation-config>
是用于激活那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)上面的注解,是一个注解处理工具。
<context:component-scan>除了具有
<context:annotation-config>的功能之外,
<context:component-scan>
还可以在指定的package下扫描以及注册javabean 。
下面我们通过例子来详细查看他们的区别,
有三个class A,B,C,并且B,C的对象被注入到A中.
[java] view plain copy 

package com.xxx;
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
在applicationContext.xml中加入下面的配置 :
<bean id="bBean"/><bean id="cBean"/><bean id="aBean">
<property name="bbb" ref="bBean"/> <property name="ccc" ref="cBean"/></bean>
加载applicationContext.xml配置文件,将得到下面的结果:
creating bean B: com.xxx.B@c2ff5
creating bean C: com.xxx.C@1e8a1f6
creating bean A: com.yyy.A@1e152c5
setting A.bbb with com.xxx.B@c2ff5
setting A.ccc with com.xxx.C@1e8a1f6
OK, 这个结果没什么好说的,就是完全通过xml的方式,不过太过时了,下面通过注解的方式来简化我们的xml配置文件
首先,我们使用autowire的方式将对象bbb和ccc注入到A中:
[java] view plain copy 

package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
然后,我们就可以从applicationContext.xml中移除下面的配置
<property name="bbb" ref="bBean"/><property name="ccc" ref="cBean"/>
移除之后,我们的applicationContext.xml配置文件就简化为下面的样子了
<bean id="bBean"/><bean id="cBean"/><bean id="aBean"/>
当我们加载applicationContext.xml配置文件之后,将得到下面的结果:
creating bean B: com.xxx.B@5e5a50
creating bean C: com.xxx.C@54a328
creating bean A: com.yyy.A@a3d4cf
OK, 结果是错误的的,究竟是因为什么呢?为什么我们的属性没有被注入进去呢?
是因为注解本身并不能够做任何事情,它们只是最基本的组成部分,我们需要能够处理这些注解的处理工具来处理这些注解
这就是<context:annotation-config>
所做的事情
我们将applicationContext.xml配置文件作如下修改:
<context:annotation-config /><bean id="bBean"/><bean id="cBean"/><bean id="aBean"/>
当我们加载applicationContext.xml配置文件之后,将得到下面的结果:
creating bean B: com.xxx.B@15663a2
creating bean C: com.xxx.C@cd5f8b
creating bean A: com.yyy.A@157aa53
setting A.bbb with com.xxx.B@15663a2
setting A.ccc with com.xxx.C@cd5f8b
OK, 结果正确了。
下面演示<context:annotation-config> 跟 <context:component-scan>区别:
但是如果我们将代码作如下修改:
[java] view plain copy 

package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.xxx.B;
import com.xxx.C;
@Component
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
applicationContext.xml配置文件修改为:
<context:annotation-config />
当我们加载applicationContext.xml配置文件之后,却没有任何输出,这是为什么呢?
那是因为<context:annotation-config />仅能够在已经在已经注册过的bean上面起作用。
对于没有在spring容器中注册的bean,它并不能执行任何操作。
但是不用担心,<context:component-scan>除了具有
<context:annotation-config />的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
我们将applicationContext.xml配置文件作如下修改:
<context:component-scan base-package="com.xxx"/>
当我们加载applicationContext.xml的时候,会得到下面的结果:
creating bean B: com.xxx.B@1be0f0a
creating bean C: com.xxx.C@80d1ff
这是什么原因呢?
是因为我们仅仅扫描了com.xxx包及其子包的类,而class A是在com.yyy包下,所以就扫描不到了
下面我们在applicationContext.xml中把com.yyy也加入进来:
<context:component-scan base-package="com.xxx"/><context:component-scan base-package="com.xxx,com.yyy"/>
然后加载applicationContext.xml就会得到下面的结果:
creating bean B: com.xxx.B@cd5f8b
creating bean C: com.xxx.C@15ac3c9
creating bean A: com.yyy.A@ec4a87
setting A.bbb with com.xxx.B@cd5f8b
setting A.ccc with com.xxx.C@15ac3c9
哇,结果正确啦 !
回头看下我们的applicationContext.xml文件,已经简化为:
<context:component-scan base-package="com.xxx"/><context:component-scan base-package="com.xxx,com.yyy"/>
了。
那如果我们在applicationContext.xml手动加上下面的配置,也就是说既在applicationContext.xml中手动的注册了A的实例对象,同时,通过component-scan去扫描并注册B,C的对象
<context:component-scan base-package="com.xxx"/><bean id="aBean"/>
结果仍是正确的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
虽然class A并不是通过扫描的方式注册到容器中的 ,但是<context:component-scan>
所产生的的处理那些注解的处理器工具,会处理所有绑定到容器上面的bean,不管是通过xml手动注册的还是通过scanning扫描注册的。
那么,如果我们通过下面的方式呢?我们既配置了<context:annotation-config />,又配置了<context:component-scan base-package="com.xxx" />,它们都具有处理在容器中注册的bean里面的注解的功能。会不会出现重复注入的情况呢?
<context:annotation-config /><context:component-scan base-package="com.xxx"/><bean id="aBean"/>
不用担心,不会出现的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
因为<context:annotation-config />和
<context:component-scan>同时存在的时候,前者会被忽略。也就是那些@autowire,@resource等注入注解只会被注入一次
哪怕是你手动的注册了多个处理器,spring仍然只会处理一次:
[xml] view plain copy 

<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean" />
<bean id="bla" />
<bean id="bla1" />
<bean id="bla2" />
<bean id="bla3" />
结果仍是正确的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@25d2b2
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87

和之间的区别
如何解决<context:annotation-config>和<context:component-scan>之间的区别?
<context:annotation-config>
用于激活已经在应用程序上下文中注册的bean中的注释(无论它们是使用XML定义还是通过包扫描定义的)。
<context:component-scan>
不仅可以执行<context:annotation-config>
操作,<context:component-scan>
还可以扫描软件包以在应用程序上下文中查找并注册bean。
我将使用一些示例来显示差异/相似之处。
让我们用型的三种豆基本设置开始A
,B
并且C
,与B
和C
被注入A
。
package com.xxx;
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
使用以下XML配置:
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean">
<property name="bbb" ref="bBean" />
<property name="ccc" ref="cBean" />
</bean>
加载上下文会产生以下输出:
creating bean B: com.xxx.B@c2ff5
creating bean C: com.xxx.C@1e8a1f6
creating bean A: com.yyy.A@1e152c5
setting A.bbb with com.xxx.B@c2ff5
setting A.ccc with com.xxx.C@1e8a1f6
好的,这是预期的输出。但这是“旧风格”的spring。现在我们有了注释,因此让我们使用它们来简化XML。
首先,让我们自动连接bean
的bbb
和ccc
属性,A
如下所示:
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
这使我可以从XML中删除以下行:
<property name="bbb" ref="bBean" />
<property name="ccc" ref="cBean" />
我的XML现在简化为:
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean"/>
当我加载上下文时,我得到以下输出:
creating bean B: com.xxx.B@5e5a50
creating bean C: com.xxx.C@54a328
creating bean A: com.yyy.A@a3d4cf
好,这是错误的!发生了什么?为什么我的房屋不自动接线?
好吧,注解是一个不错的功能,但就其本身而言,它们什么也没做。他们只是注释东西。你需要一个处理工具来查找批注并对其进行处理。
<context:annotation-config>
进行营救。这将激活对在定义自身的相同应用程序上下文中定义的bean上发现的注释的操作。
如果我将XML更改为此:
<context:annotation-config />
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean"/>
当我加载应用程序上下文时,我得到正确的结果:
creating bean B: com.xxx.B@15663a2
creating bean C: com.xxx.C@cd5f8b
creating bean A: com.yyy.A@157aa53
setting A.bbb with com.xxx.B@15663a2
setting A.ccc with com.xxx.C@cd5f8b
好的,这很好,但是我从XML中删除了两行并添加了一行。那不是很大的区别。带有注释的想法是应该删除XML。
因此,让我们删除XML定义并将其全部替换为注释:
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.xxx.B;
import com.xxx.C;
@Component
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
在XML中,我们仅保留以下内容:
<context:annotation-config />
我们加载上下文,结果是……什么都没有。没有创建bean,也没有自动装配bean。没有!
这是因为,正如我在第一段中所述,这<context:annotation-config />
仅适用于在应用程序上下文中注册的bean。因为我删除了这三个bean的XML配置,所以没有创建bean,<context:annotation-config />
也没有要处理的“目标”。
但这不会成为一个问题<context:component-scan>
,可以扫描软件包以查找“目标”。让我们将XML配置的内容更改为以下条目:
<context:component-scan base-package="com.xxx" />
当我加载上下文时,我得到以下输出:
creating bean B: com.xxx.B@1be0f0a
creating bean C: com.xxx.C@80d1ff
嗯…有些东西丢失了。为什么?
如果你在班closelly看,类A有包com.yyy,但我已经在指定<context:component-scan>
使用的软件包com.xxx所以这完全错过了我的A班,只有拿起B和C它们的com.xxx软件包。
为了解决这个问题,我还添加了另一个软件包:
<context:component-scan base-package="com.xxx,com.yyy" />
现在我们得到了预期的结果:
creating bean B: com.xxx.B@cd5f8b
creating bean C: com.xxx.C@15ac3c9
creating bean A: com.yyy.A@ec4a87
setting A.bbb with com.xxx.B@cd5f8b
setting A.ccc with com.xxx.C@15ac3c9
就是这样!现在你不再有XML定义,而有了注释。
作为最后一个示例,保留带注释的类A,B并将C以下内容添加到XML中,加载上下文后会得到什么?
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
我们仍然得到正确的结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
即使A不是通过扫描获得用于类的Bean ,处理工具仍将应用于<context:component-scan>
在应用程序上下文中注册的所有Bean,即使A是已在XML中手动注册的。
但是,如果我们具有以下XML,会不会得到重复的bean,因为我们同时指定了<context:annotation-config />
和<context:component-scan>
?
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
不,没有重复,我们再次得到了预期的结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
这是因为两个标签都注册了相同的处理工具( 如果已指定,则可以省略),但是Spring只会运行它们一次。
即使你多次注册处理工具,Spring仍将确保它们仅执行一次魔术。此XML:
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
<bean id="bla"/>
<bean id="bla1"/>
<bean id="bla2"/>
<bean id="bla3"/>
仍会产生以下结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@25d2b2
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
解决方法
我正在学习Spring 3,但似乎并没有掌握<context:annotation-config>and
背后的功能<context:component-scan>
。
从我读过他们似乎处理不同的注解(@Required,@Autowired
等等VS @Component,@Repository,@Service
等),而且从我读过他们注册相同什么bean后置处理器类。
为了更迷惑我,还有一个annotation-config
属性上<context:component-scan>
。
有人可以阐明这些标签吗?有什么相似之处,有什么不同之处,一个被另一个取代,它们彼此完成,我是否需要其中一个?

android – onCreateContextMenu使用ContextMenuInfo的null值调用
我正在尝试使用ContextMenu.
我已经使用SimpleCursorAdapter为一个简单的ListActivity成功完成了这个.
接下来我想用CursorAdapter替换SimpleCursorAdapter但仍然保留ContextMenu行为,所以我添加了两个强制覆盖函数bindView和newView
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mLayoutInflater.inflate(R.layout.check_row, parent, false);
registerForContextMenu(view);
return view;
}
请注意registerForContextMenu,它替换了ListActivity的onCreate方法中的registerForContextMenu(getListView()).我发现有必要调用onCreateContextMenu(…)
所有这些都可行(使用预期的小部件创建的行,对它们的回调等工作等).除了提供给onCreateContextMenu(…)的ContextMenuInfo参数现在为null之外的所有内容 – 停止我访问rowId.
还有其他技巧要做 – 也许是在CursorAdapter的bindView(…)方法中?
解决方法:
我正在回答这个问题 – 但我会指出’commonsware.com’提供了线索和方向,见上文.
问题
– 在行布局中使用CheckBox会影响上下文菜单的使用
– 我相信CheckedTextView是用于多选的,它不适合初始化已检查状态.
我采用的解决方案如下
1.使用CheckedTextView
2.从CursorAdapter扩展到bindView(…)期间初始化检查状态
注意:这必须管理显示正确的图标
3.在onListItemClick(…)中管理CheckedTextView的状态并将其记录在dBase中,不要忘记更新光标.

android.view.ContextMenu.ContextMenuInfo的实例源码
项目:yaacc-code
文件:ContentListActivity.java
/**
* Creates context menu for certain actions on a specific item.
*/
@Override
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
if (v instanceof ListView) {
ListView listView = (ListView) v;
Object item = listView.getAdapter().getItem(info.position);
if (item instanceof DIDLObject) {
selectedDIDLObject = (DIDLObject) item;
}
}
menu.setHeaderTitle(v.getContext().getString(
R.string.browse_context_title));
ArrayList<String> menuItems = new ArrayList<String>();
menuItems.add(v.getContext().getString(R.string.browse_context_play_all));
menuItems.add(v.getContext().getString(R.string.browse_context_play));
//menuItems.add(v.getContext().getString( R.string.browse_context_add_to_playplist));
menuItems.add(v.getContext()
.getString(R.string.browse_context_download));
for (int i = 0; i < menuItems.size(); i++) {
menu.add(Menu.NONE,i,menuItems.get(i));
}
}
项目:CSipSimple
文件:CodecsFragment.java
@Override
@SuppressWarnings("unchecked")
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
Log.e(THIS_FILE,"bad menuInfo",e);
return;
}
HashMap<String,Object> codec = (HashMap<String,Object>) mAdapter.getItem(info.position);
if (codec == null) {
// If for some reason the requested item isn't available,do nothing
return;
}
boolean isdisabled = ((Short)codec.get(CODEC_PRIORITY) == 0);
menu.add(0,MENU_ITEM_ACTIVATE,isdisabled ? R.string.activate : R.string.deactivate);
}
项目:CSipSimple
文件:AccountsEditListFragment.java
/**
* Retrieve sip account from a given context menu info pressed
* @param cmi The context menu info to retrieve infos from
* @return corresponding sip profile if everything goes well,null if not able to retrieve profile
*/
private SipProfile profileFromContextMenuInfo(ContextMenuInfo cmi) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) cmi;
} catch (ClassCastException e) {
Log.e(THIS_FILE,e);
return null;
}
Cursor c = (Cursor) getlistadapter().getItem(info.position - getListView().getHeaderViewsCount());
if (c == null) {
// For some reason the requested item isn't available,do nothing
return null;
}
return new SipProfile(c);
}
项目:CSipSimple
文件:AccountsEditListFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu,v,menuInfo);
final SipProfile account = profileFromContextMenuInfo(menuInfo);
if(account == null) {
return;
}
WizardInfo wizardInfos = WizardUtils.getWizardClass(account.wizard);
// Setup the menu header
menu.setHeaderTitle(account.display_name);
if(wizardInfos != null) {
menu.setHeaderIcon(wizardInfos.icon);
}
menu.add(0,account.active ? R.string.deactivate_account
: R.string.activate_account);
menu.add(0,MENU_ITEM_MODIFY,R.string.modify_account);
menu.add(0,MENU_ITEM_DELETE,R.string.delete_account);
menu.add(0,MENU_ITEM_WIZARD,R.string.choose_wizard);
}
项目:chromium-for-android-56-debug-video
文件:RecentTabsPage.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
// Would prefer to have this context menu view managed internal to RecentTabsGroupView
// Unfortunately,setting either onCreateContextMenuListener or onLongClickListener
// disables the native onClick (expand/collapse) behavIoUr of the group view.
ExpandableListView.ExpandableListContextMenuInfo info =
(ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
mAdapter.getGroup(groupPosition).onCreateContextMenuForGroup(menu,mActivity);
} else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
mAdapter.getGroup(groupPosition).onCreateContextMenuForChild(childPosition,menu,mActivity);
}
}
项目:financisto1-holo
文件:AbstractListActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
AdapterView.AdapterContextMenuInfo mi = (AdapterView.AdapterContextMenuInfo)menuInfo;
String headerTitle = getContextMenuHeaderTitle(mi.position);
if (headerTitle != null) {
menu.setHeaderTitle(headerTitle);
}
List<MenuItemInfo> menus = createContextMenus(mi.id);
int i = 0;
for (MenuItemInfo m : menus) {
if (m.enabled) {
menu.add(0,m.menuId,i++,m.titleId);
}
}
}
项目:exciting-app
文件:ExpandableHListView.java
@Override
ContextMenuInfo createContextMenuInfo( View view,int flatListPosition,long id ) {
if( isHeaderOrFooterPosition( flatListPosition ) ) {
// Return normal info for header/footer view context menus
return new AdapterContextMenuInfo( view,flatListPosition,id );
}
final int adjustedPosition = getFlatPositionForConnector( flatListPosition );
ExpandableHListConnector.PositionMetadata pm = mConnector.getUnflattenedPos( adjustedPosition );
ExpandableHListPosition pos = pm.position;
id = getChildOrGroupId( pos );
long packedPosition = pos.getPackedPosition();
pm.recycle();
return new ExpandableListContextMenuInfo( view,packedPosition,id );
}
项目:aos-Video
文件:AutoScraperActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,View view,view,menuInfo);
// Show the name of the file in the header
AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo)menuInfo;
int position = adapterMenuInfo.position;
mActivityFileCursor.movetoPosition(position);
String path = mActivityFileCursor.getString(mDataIndex);
MetaFile file = MetaFile.from(path);
menu.setHeaderTitle(file.getName());
// Add the context menu items
menu.add(0,R.string.info,R.string.info);
// Save the path,we will need it when an entry of the menu is selected
mContextMenuPath = path;
}
项目:buildAPKsSamples
文件:AccountsActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
if (v.getId() != R.id.accounts_list) {
return;
}
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
Account account = (Account) adapter.getItem(info.position);
menu.setHeaderTitle(account.toString());
String[] menuItems = getResources().getStringArray(R.array.account_actions);
for (int i = 0; i < menuItems.length; i++) {
menu.add(Menu.NONE,menuItems[i]);
}
}
项目:encdroidMC
文件:EDVolumeListActivity.java
public void onCreateContextMenu(ContextMenu menu,menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.volume_list_context,menu);
// Change the text of the lock/unlock item based on volume status
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
EDVolume selected = mAdapter.getItem((int) info.id);
MenuItem lockItem = menu.findItem(R.id.volume_list_menu_lock);
if (selected.isLocked()) {
lockItem.setTitle(getString(R.string.menu_unlock_volume));
} else {
lockItem.setTitle(getString(R.string.menu_lock_volume));
}
}
项目:microMathematics
文件:Commander.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo)
{
try
{
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
if (info != null)
{
fileListView.setSelection(info.position,0);
}
menu.setHeaderTitle(R.string.fman_operation);
AdapterIf ca = getlistadapter();
ca.populateContextMenu(menu,info,fileListView.getSelected());
}
catch (Exception e)
{
e.printstacktrace();
}
}
项目:SmartMath
文件:ActivityCfgKeyPad.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu,menuInfo);
if (v.getTag() instanceof InputKeyReference) {
menu.setHeaderTitle(R.string.what_do_you_want);
menu.add(0,KEY_CONTEXT_MENU_CUT,R.string.cut_key);
menu.add(0,KEY_CONTEXT_MENU_copY,R.string.copy_key);
if (minputKeyRefClipboard.isEmpty() == false) {
menu.add(0,KEY_CONTEXT_MENU_PASTE_BEFORE,R.string.paste_before_key);
menu.add(0,KEY_CONTEXT_MENU_PASTE_ON,R.string.paste_on_key);
menu.add(0,KEY_CONTEXT_MENU_PASTE_AFTER,R.string.paste_after_key);
}
menu.add(0,KEY_CONTEXT_MENU_CREATE_BEFORE,R.string.create_before_key);
menu.add(0,KEY_CONTEXT_MENU_CREATE_AFTER,R.string.create_after_key);
menu.add(0,KEY_CONTEXT_MENU_DELETE,R.string.delete_key);
menu.add(0,KEY_CONTEXT_MENU_EDIT,R.string.edit_key);
// should not use assign,i.e. minputKeyrefunderOpt = v.getTag()
// cause minputKeyrefunderOpt and tag may change in different scenarios
minputKeyrefunderOpt.copy((InputKeyReference) v.getTag());
}
}
项目:q-mail
文件:FolderList.java
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
getMenuInflater().inflate(R.menu.folder_context,menu);
FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getItem(info.position);
menu.setHeaderTitle(folder.displayName);
}
项目:q-mail
文件:Accounts.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
menu.setHeaderTitle(R.string.accounts_context_menu_title);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
BaseAccount account = mAdapter.getItem(info.position);
if ((account instanceof Account) && !((Account) account).isEnabled()) {
getMenuInflater().inflate(R.menu.disabled_accounts_context,menu);
} else {
getMenuInflater().inflate(R.menu.accounts_context,menu);
}
if (account instanceof SearchAccount) {
for (int i = 0; i < menu.size(); i++) {
android.view.MenuItem item = menu.getItem(i);
item.setVisible(false);
}
}
else {
EnumSet<ACCOUNT_LOCATION> accountLocation = accountLocation(account);
if (accountLocation.contains(ACCOUNT_LOCATION.TOP)) {
menu.findItem(R.id.move_up).setEnabled(false);
}
else {
menu.findItem(R.id.move_up).setEnabled(true);
}
if (accountLocation.contains(ACCOUNT_LOCATION.BottOM)) {
menu.findItem(R.id.move_down).setEnabled(false);
}
else {
menu.findItem(R.id.move_down).setEnabled(true);
}
}
}
项目:PeSanKita-android
文件:VerifyIdentityActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu,menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.verify_display_fragment_context_menu,menu);
}
项目:CSipSimple
文件:AccountFiltersListFragment.java
/**
* Retrieve filter id from a given context menu info pressed
* @param cmi The context menu info to retrieve infos from
* @return corresponding filter id if everything goes well,-1 if not able to retrieve filter
*/
private long filterIdFromContextMenuInfo(ContextMenuInfo cmi) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) cmi;
} catch (ClassCastException e) {
Log.e(THIS_FILE,e);
return -1;
}
return info.id;
}
项目:CSipSimple
文件:AccountFiltersListFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
final long filterId = filterIdFromContextMenuInfo(menuInfo);
if(filterId == -1) {
return;
}
menu.add(0,R.string.edit);
menu.add(0,R.string.delete_filter);
}
项目:open-rmbt
文件:RMBTSyncRequestCodeFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo contextMenuInfo)
{
if (view instanceof TextView && view == codeText)
menu.add(Menu.NONE,view.getId(),Menu.NONE,R.string.sync_request_code_context_copy);
else
super.onCreateContextMenu(menu,contextMenuInfo);
}
项目:chromium-for-android-56-debug-video
文件:ContextMenuHelper.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
assert mPopulator != null;
mPopulator.buildContextMenu(menu,v.getContext(),mCurrentContextMenuParams);
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setonMenuItemClickListener(this);
}
}
项目:buildAPKsApps
文件:Trolly.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
return;
}
Cursor cursor = (Cursor)getlistadapter().getItem(info.position);
if (cursor == null) {
// For some reason the requested item isn't available,do nothing
return;
}
// Setup the menu header
menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex(ShoppingList.ITEM)));
int status = cursor.getInt(cursor.getColumnIndex(ShoppingList.STATUS));
//Add context menu items depending on current state
switch (status) {
case ShoppingList.OFF_LIST:
menu.add(0,MENU_ITEM_ON_LIST,R.string.move_on_list);
menu.add(0,MENU_ITEM_IN_TROLLEY,R.string.move_in_trolley);
break;
case ShoppingList.ON_LIST:
menu.add(0,R.string.move_in_trolley);
menu.add(0,MENU_ITEM_OFF_LIST,R.string.move_off_list);
break;
case ShoppingList.IN_TROLLEY:
menu.add(0,R.string.move_off_list);
break;
}
// Add context menu items that are relevant for all items
menu.add(0,MENU_ITEM_EDIT,R.string.edit_item);
menu.add(0,R.string.delete_item);
}
项目:buildAPKsApps
文件:SimplyDoActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo)
{
Log.v(L.TAG,"ItemsListReactor.onCreateContextMenu()");
AdapterContextMenuInfo ctxMenuInfo = (AdapterContextMenuInfo)menuInfo;
ListView listView = (ListView)findViewById(R.id.ItemsListView);
ctxItem = (ItemDesc)listView.getItemAtPosition(ctxMenuInfo.position);
menu.setHeaderTitle("Item Options");
menu.add(Menu.NONE,EDIT_ITEM,"Edit");
menu.add(Menu.NONE,DELETE_ITEM,"Delete");
String toggleText;
if(ctxItem.isstar())
{
toggleText = "Remove Star";
}
else
{
toggleText = "Add Star";
}
menu.add(Menu.NONE,TOGGLE_STAR,toggleText);
if(dataViewer.getListData().size() > 1)
{
menu.add(Menu.NONE,MOVE_ITEM,"Move To");
}
}
项目:buildAPKsApps
文件:SimplyDoActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,"ListsListReactor.onCreateContextMenu()");
AdapterContextMenuInfo ctxMenuInfo = (AdapterContextMenuInfo)menuInfo;
ListView listView = (ListView)findViewById(R.id.ListsListView);
ctxList = (ListDesc)listView.getItemAtPosition(ctxMenuInfo.position);
menu.setHeaderTitle("List Options");
menu.add(Menu.NONE,EDIT_LIST,DELETE_LIST,"Delete");
}
项目:buildAPKsApps
文件:BarrageList.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
menu.clear();
menu.add(0,MENU_EDIT,R.string.menu_edit);
menu.add(0,MENU_PAUSE,R.string.menu_pause);
menu.add(0,MENU_DELETE,R.string.menu_delete);
}
项目:buildAPKsApps
文件:RecipientsEditor.java
@Override
protected ContextMenuInfo getContextMenuInfo() {
if ((mLongpressedPosition >= 0)) {
Spanned text = getText();
int start = mTokenizer.findTokenStart(text,mLongpressedPosition);
int end = mTokenizer.findTokenEnd(text,start);
if (end != start) {
Recipient r = getRecipientAt(getText(),start,end);
return new RecipientContextMenuInfo(r);
}
}
return null;
}
项目:Huochexing12306
文件:MonitorMangAty.java
private void setListViewContextMenuWithDel() {
lvMang.setonCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
intCurrDataPos = ((AdapterContextMenuInfo) menuInfo).position;
menu.add(0,"删除");
}
});
}
项目:Huochexing12306
文件:MonitorMangAty.java
private void setListViewContextMenuWithDel_Resume() {
lvMang.setonCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu,"删除");
menu.add(0,1,"恢复所有已暂停车次");
}
});
}
项目:aos-Video
文件:SubtitlesWizardActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo)menuInfo;
mPosition = adapterMenuInfo.position;
ItemData itemData = getItemData(mPosition);
if (itemData.type == ITEM_DATA_TYPE_SEParaTOR || itemData.type == ITEM_DATA_TYPE_MESSAGE) {
// No contextual menu for separators or messages
return;
}
// Show the name of the file in the header
File file = new File(itemData.path);
menu.setHeaderTitle(file.getName());
if (itemData.type == ITEM_DATA_TYPE_CURRENT) {
// Contextual menu for current subtitles files
menu.add(0,R.string.subtitles_wizard_delete,R.string.subtitles_wizard_delete);
}
else {
// Contextual menu for available subtitles files
menu.add(0,R.string.subtitles_wizard_associate,R.string.subtitles_wizard_associate);
menu.add(0,R.string.subtitles_wizard_delete);
}
}
项目:aos-Video
文件:browserActivity.java
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
if (DBG)
Log.d(TAG,"onCreateContextMenu");
if ((mCoverRoll != null) && v.equals(mCoverRoll)) {
mCoverRoll.createContextMenu(this,menu);
}
super.onCreateContextMenu(menu,menuInfo);
}
项目:buildAPKsSamples
文件:Notepadv2.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
// Todo: fill in rest of method
}
项目:android-mrz-reader
文件:CaptureActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
if (v.equals(ocrResultView)) {
menu.add(Menu.NONE,OPTIONS_copY_RECOGNIZED_TEXT_ID,"copy recognized text");
menu.add(Menu.NONE,OPTIONS_SHARE_RECOGNIZED_TEXT_ID,"Share recognized text");
} else if (v.equals(translationView)) {
menu.add(Menu.NONE,OPTIONS_copY_TRANSLATED_TEXT_ID,"copy translated text");
menu.add(Menu.NONE,OPTIONS_SHARE_TRANSLATED_TEXT_ID,"Share translated text");
}
}
项目:encdroidMC
文件:EDFileChooserActivity.java
public void onCreateContextMenu(ContextMenu menu,menuInfo);
MenuInflater inflater = getMenuInflater();
if (mMode == FILE_PICKER_MODE) {
inflater.inflate(R.menu.file_picker_context,menu);
} else {
inflater.inflate(R.menu.file_chooser_context,menu);
}
}
项目:firebase-testlab-instr-lib
文件:NotesList.java
@Override
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
Log.e(TAG,e);
return;
}
Cursor cursor = (Cursor) getlistadapter().getItem(info.position);
if (cursor == null) {
// For some reason the requested item isn't available,do nothing
return;
}
// Inflate menu from XML resource
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_context_menu,menu);
// Set the context menu header
menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));
// Append to the
// menu items for any other activities that can do stuff with it
// as well. This does a query on the system for any activities that
// implement the ALTERNATIVE_ACTION for our data,adding a menu item
// for each one that is found.
Intent intent = new Intent(null,Uri.withAppendedpath(getIntent().getData(),Integer.toString((int) info.id) ));
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE,new ComponentName(this,NotesList.class),null,intent,null);
}
项目:XPrivacy
文件:ActivityApp.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
// Check if running
boolean running = false;
ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
for (RunningAppProcessInfo info : activityManager.getRunningAppProcesses())
if (info.uid == mAppInfo.getUid())
running = true;
PackageManager pm = getPackageManager();
List<String> listPackageNames = mAppInfo.getPackageName();
List<String> listApplicationName = mAppInfo.getApplicationName();
for (int i = 0; i < listPackageNames.size(); i++) {
Menu appMenu = (listPackageNames.size() == 1) ? menu : menu.addSubMenu(i,listApplicationName.get(i));
// Launch
MenuItem launch = appMenu.add(i,MENU_LAUNCH,getString(R.string.menu_app_launch));
if (pm.getLaunchIntentForPackage(listPackageNames.get(i)) == null)
launch.setEnabled(false);
// Settings
appMenu.add(i,MENU_SETTINGS,getString(R.string.menu_app_settings));
// Kill
MenuItem kill = appMenu.add(i,MENU_KILL,getString(R.string.menu_app_kill));
kill.setEnabled(running && PrivacyManager.isApplication(mAppInfo.getUid()));
// Play store
MenuItem store = appMenu.add(i,MENU_STORE,getString(R.string.menu_app_store));
if (!Util.hasMarketLink(this,listPackageNames.get(i)))
store.setEnabled(false);
}
}
项目:Cable-Android
文件:VerifyIdentityActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
if (fingerprint != null) {
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.verify_display_fragment_context_menu,menu);
}
}
项目:yaacc-code
文件:PlayerListItemClickListener.java
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
menu.setHeaderTitle(v.getContext().getString(R.string.browse_context_title));
ArrayList<String> menuItems = new ArrayList<String>();
menuItems.add(v.getContext().getString(R.string.open));
menuItems.add(v.getContext().getString(R.string.exitactivity));
for (int i = 0; i < menuItems.size(); i++) {
menu.add(Menu.NONE,menuItems.get(i));
}
}
项目:GCSApp
文件:ContactListFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
toBeProcessUser = (EaseUser) listView.getItemAtPosition(((AdapterContextMenuInfo) menuInfo).position);
toBeProcessUsername = toBeProcessUser.getUsername();
getActivity().getMenuInflater().inflate(R.menu.em_context_contact_list,menu);
}
项目:q-mail
文件:MessageListFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
Cursor cursor = (Cursor) listView.getItemAtPosition(info.position);
if (cursor == null) {
return;
}
getActivity().getMenuInflater().inflate(R.menu.message_list_item_context,menu);
menu.findItem(R.id.debug_delete_locally).setVisible(BuildConfig.DEBUG);
contextMenuUniqueId = cursor.getLong(uniqueIdColumn);
Account account = getAccountFromCursor(cursor);
String subject = cursor.getString(SUBJECT_COLUMN);
boolean read = (cursor.getInt(READ_COLUMN) == 1);
boolean flagged = (cursor.getInt(FLAGGED_COLUMN) == 1);
menu.setHeaderTitle(subject);
if (selected.contains(contextMenuUniqueId)) {
menu.findItem(R.id.select).setVisible(false);
} else {
menu.findItem(R.id.deselect).setVisible(false);
}
if (read) {
menu.findItem(R.id.mark_as_read).setVisible(false);
} else {
menu.findItem(R.id.mark_as_unread).setVisible(false);
}
if (flagged) {
menu.findItem(R.id.flag).setVisible(false);
} else {
menu.findItem(R.id.unflag).setVisible(false);
}
if (!messagingController.iscopyCapable(account)) {
menu.findItem(R.id.copy).setVisible(false);
}
if (!messagingController.isMoveCapable(account)) {
menu.findItem(R.id.move).setVisible(false);
menu.findItem(R.id.archive).setVisible(false);
menu.findItem(R.id.spam).setVisible(false);
}
if (!account.hasArchiveFolder()) {
menu.findItem(R.id.archive).setVisible(false);
}
if (!account.hasspamFolder()) {
menu.findItem(R.id.spam).setVisible(false);
}
}
项目:q-mail
文件:ManageIdentities.java
@Override
public void onCreateContextMenu(ContextMenu menu,menuInfo);
menu.setHeaderTitle(R.string.manage_identities_context_menu_title);
getMenuInflater().inflate(R.menu.manage_identities_context,menu);
}
项目:GitHub
文件:FreeFlowContainer.java
ContextMenuInfo createContextMenuInfo(View view,int sectionIndex,int positionInSection,long id) {
return new AbsLayoutContainerContextMenuInfo(view,sectionIndex,positionInSection,id);
}
项目:CCDownload
文件:UploadFragment.java
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) {
menu.setHeaderTitle("操作");
menu.add(0,"删除");
}
我们今天的关于在附加到NotifyIcon的ContextMenu中延迟单击事件的分享就到这里,谢谢您的阅读,如果想了解更多关于和之间的区别、android – onCreateContextMenu使用ContextMenuInfo的null值调用、android.view.ContextMenu.ContextMenuInfo的实例源码 的相关信息,可以在本站进行搜索。
本文标签:
<context:annotation-config>
是用于激活那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)上面的注解,是一个注解处理工具。
<context:component-scan>除了具有
<context:annotation-config>的功能之外,
<context:component-scan>
还可以在指定的package下扫描以及注册javabean 。
下面我们通过例子来详细查看他们的区别,
有三个class A,B,C,并且B,C的对象被注入到A中.
[java] view plain copy
package com.xxx;
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
在applicationContext.xml中加入下面的配置 :
<bean id="bBean"/><bean id="cBean"/><bean id="aBean">
<property name="bbb" ref="bBean"/> <property name="ccc" ref="cBean"/></bean>
加载applicationContext.xml配置文件,将得到下面的结果:
creating bean B: com.xxx.B@c2ff5
creating bean C: com.xxx.C@1e8a1f6
creating bean A: com.yyy.A@1e152c5
setting A.bbb with com.xxx.B@c2ff5
setting A.ccc with com.xxx.C@1e8a1f6
OK, 这个结果没什么好说的,就是完全通过xml的方式,不过太过时了,下面通过注解的方式来简化我们的xml配置文件
首先,我们使用autowire的方式将对象bbb和ccc注入到A中:
[java] view plain copy
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
然后,我们就可以从applicationContext.xml中移除下面的配置
<property name="bbb" ref="bBean"/><property name="ccc" ref="cBean"/>
移除之后,我们的applicationContext.xml配置文件就简化为下面的样子了
<bean id="bBean"/><bean id="cBean"/><bean id="aBean"/>
当我们加载applicationContext.xml配置文件之后,将得到下面的结果:
creating bean B: com.xxx.B@5e5a50
creating bean C: com.xxx.C@54a328
creating bean A: com.yyy.A@a3d4cf
OK, 结果是错误的的,究竟是因为什么呢?为什么我们的属性没有被注入进去呢?
是因为注解本身并不能够做任何事情,它们只是最基本的组成部分,我们需要能够处理这些注解的处理工具来处理这些注解
这就是<context:annotation-config>
所做的事情
我们将applicationContext.xml配置文件作如下修改:
<context:annotation-config /><bean id="bBean"/><bean id="cBean"/><bean id="aBean"/>
当我们加载applicationContext.xml配置文件之后,将得到下面的结果:
creating bean B: com.xxx.B@15663a2
creating bean C: com.xxx.C@cd5f8b
creating bean A: com.yyy.A@157aa53
setting A.bbb with com.xxx.B@15663a2
setting A.ccc with com.xxx.C@cd5f8b
OK, 结果正确了。
下面演示<context:annotation-config> 跟 <context:component-scan>区别:
但是如果我们将代码作如下修改:
[java] view plain copy
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.xxx.B;
import com.xxx.C;
@Component
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
applicationContext.xml配置文件修改为:
<context:annotation-config />
当我们加载applicationContext.xml配置文件之后,却没有任何输出,这是为什么呢?
那是因为<context:annotation-config />仅能够在已经在已经注册过的bean上面起作用。
对于没有在spring容器中注册的bean,它并不能执行任何操作。
但是不用担心,<context:component-scan>除了具有
<context:annotation-config />的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
我们将applicationContext.xml配置文件作如下修改:
<context:component-scan base-package="com.xxx"/>
当我们加载applicationContext.xml的时候,会得到下面的结果:
creating bean B: com.xxx.B@1be0f0a
creating bean C: com.xxx.C@80d1ff
这是什么原因呢?
是因为我们仅仅扫描了com.xxx包及其子包的类,而class A是在com.yyy包下,所以就扫描不到了
下面我们在applicationContext.xml中把com.yyy也加入进来:
<context:component-scan base-package="com.xxx"/><context:component-scan base-package="com.xxx,com.yyy"/>
然后加载applicationContext.xml就会得到下面的结果:
creating bean B: com.xxx.B@cd5f8b
creating bean C: com.xxx.C@15ac3c9
creating bean A: com.yyy.A@ec4a87
setting A.bbb with com.xxx.B@cd5f8b
setting A.ccc with com.xxx.C@15ac3c9
哇,结果正确啦 !
回头看下我们的applicationContext.xml文件,已经简化为:
<context:component-scan base-package="com.xxx"/><context:component-scan base-package="com.xxx,com.yyy"/>
了。
那如果我们在applicationContext.xml手动加上下面的配置,也就是说既在applicationContext.xml中手动的注册了A的实例对象,同时,通过component-scan去扫描并注册B,C的对象
<context:component-scan base-package="com.xxx"/><bean id="aBean"/>
结果仍是正确的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
虽然class A并不是通过扫描的方式注册到容器中的 ,但是<context:component-scan>
所产生的的处理那些注解的处理器工具,会处理所有绑定到容器上面的bean,不管是通过xml手动注册的还是通过scanning扫描注册的。
那么,如果我们通过下面的方式呢?我们既配置了<context:annotation-config />,又配置了<context:component-scan base-package="com.xxx" />,它们都具有处理在容器中注册的bean里面的注解的功能。会不会出现重复注入的情况呢?
<context:annotation-config /><context:component-scan base-package="com.xxx"/><bean id="aBean"/>
不用担心,不会出现的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
因为<context:annotation-config />和
<context:component-scan>同时存在的时候,前者会被忽略。也就是那些@autowire,@resource等注入注解只会被注入一次
哪怕是你手动的注册了多个处理器,spring仍然只会处理一次:
[xml] view plain copy
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean" />
<bean id="bla" />
<bean id="bla1" />
<bean id="bla2" />
<bean id="bla3" />
结果仍是正确的:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@25d2b2
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
和之间的区别
如何解决<context:annotation-config>和<context:component-scan>之间的区别?
<context:annotation-config>
用于激活已经在应用程序上下文中注册的bean中的注释(无论它们是使用XML定义还是通过包扫描定义的)。
<context:component-scan>
不仅可以执行<context:annotation-config>
操作,<context:component-scan>
还可以扫描软件包以在应用程序上下文中查找并注册bean。
我将使用一些示例来显示差异/相似之处。
让我们用型的三种豆基本设置开始A
,B
并且C
,与B
和C
被注入A
。
package com.xxx;
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
使用以下XML配置:
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean">
<property name="bbb" ref="bBean" />
<property name="ccc" ref="cBean" />
</bean>
加载上下文会产生以下输出:
creating bean B: com.xxx.B@c2ff5
creating bean C: com.xxx.C@1e8a1f6
creating bean A: com.yyy.A@1e152c5
setting A.bbb with com.xxx.B@c2ff5
setting A.ccc with com.xxx.C@1e8a1f6
好的,这是预期的输出。但这是“旧风格”的spring。现在我们有了注释,因此让我们使用它们来简化XML。
首先,让我们自动连接bean
的bbb
和ccc
属性,A
如下所示:
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import com.xxx.B;
import com.xxx.C;
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
这使我可以从XML中删除以下行:
<property name="bbb" ref="bBean" />
<property name="ccc" ref="cBean" />
我的XML现在简化为:
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean"/>
当我加载上下文时,我得到以下输出:
creating bean B: com.xxx.B@5e5a50
creating bean C: com.xxx.C@54a328
creating bean A: com.yyy.A@a3d4cf
好,这是错误的!发生了什么?为什么我的房屋不自动接线?
好吧,注解是一个不错的功能,但就其本身而言,它们什么也没做。他们只是注释东西。你需要一个处理工具来查找批注并对其进行处理。
<context:annotation-config>
进行营救。这将激活对在定义自身的相同应用程序上下文中定义的bean上发现的注释的操作。
如果我将XML更改为此:
<context:annotation-config />
<bean id="bBean"/>
<bean id="cBean"/>
<bean id="aBean"/>
当我加载应用程序上下文时,我得到正确的结果:
creating bean B: com.xxx.B@15663a2
creating bean C: com.xxx.C@cd5f8b
creating bean A: com.yyy.A@157aa53
setting A.bbb with com.xxx.B@15663a2
setting A.ccc with com.xxx.C@cd5f8b
好的,这很好,但是我从XML中删除了两行并添加了一行。那不是很大的区别。带有注释的想法是应该删除XML。
因此,让我们删除XML定义并将其全部替换为注释:
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class B {
public B() {
System.out.println("creating bean B: " + this);
}
}
package com.xxx;
import org.springframework.stereotype.Component;
@Component
public class C {
public C() {
System.out.println("creating bean C: " + this);
}
}
package com.yyy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.xxx.B;
import com.xxx.C;
@Component
public class A {
private B bbb;
private C ccc;
public A() {
System.out.println("creating bean A: " + this);
}
@Autowired
public void setBbb(B bbb) {
System.out.println("setting A.bbb with " + bbb);
this.bbb = bbb;
}
@Autowired
public void setCcc(C ccc) {
System.out.println("setting A.ccc with " + ccc);
this.ccc = ccc;
}
}
在XML中,我们仅保留以下内容:
<context:annotation-config />
我们加载上下文,结果是……什么都没有。没有创建bean,也没有自动装配bean。没有!
这是因为,正如我在第一段中所述,这<context:annotation-config />
仅适用于在应用程序上下文中注册的bean。因为我删除了这三个bean的XML配置,所以没有创建bean,<context:annotation-config />
也没有要处理的“目标”。
但这不会成为一个问题<context:component-scan>
,可以扫描软件包以查找“目标”。让我们将XML配置的内容更改为以下条目:
<context:component-scan base-package="com.xxx" />
当我加载上下文时,我得到以下输出:
creating bean B: com.xxx.B@1be0f0a
creating bean C: com.xxx.C@80d1ff
嗯…有些东西丢失了。为什么?
如果你在班closelly看,类A有包com.yyy,但我已经在指定<context:component-scan>
使用的软件包com.xxx所以这完全错过了我的A班,只有拿起B和C它们的com.xxx软件包。
为了解决这个问题,我还添加了另一个软件包:
<context:component-scan base-package="com.xxx,com.yyy" />
现在我们得到了预期的结果:
creating bean B: com.xxx.B@cd5f8b
creating bean C: com.xxx.C@15ac3c9
creating bean A: com.yyy.A@ec4a87
setting A.bbb with com.xxx.B@cd5f8b
setting A.ccc with com.xxx.C@15ac3c9
就是这样!现在你不再有XML定义,而有了注释。
作为最后一个示例,保留带注释的类A,B并将C以下内容添加到XML中,加载上下文后会得到什么?
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
我们仍然得到正确的结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
即使A不是通过扫描获得用于类的Bean ,处理工具仍将应用于<context:component-scan>
在应用程序上下文中注册的所有Bean,即使A是已在XML中手动注册的。
但是,如果我们具有以下XML,会不会得到重复的bean,因为我们同时指定了<context:annotation-config />
和<context:component-scan>
?
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
不,没有重复,我们再次得到了预期的结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@1d64c37
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
这是因为两个标签都注册了相同的处理工具(
即使你多次注册处理工具,Spring仍将确保它们仅执行一次魔术。此XML:
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
<bean id="aBean"/>
<bean id="bla"/>
<bean id="bla1"/>
<bean id="bla2"/>
<bean id="bla3"/>
仍会产生以下结果:
creating bean B: com.xxx.B@157aa53
creating bean C: com.xxx.C@ec4a87
creating bean A: com.yyy.A@25d2b2
setting A.bbb with com.xxx.B@157aa53
setting A.ccc with com.xxx.C@ec4a87
解决方法
我正在学习Spring 3,但似乎并没有掌握<context:annotation-config>and
背后的功能<context:component-scan>
。
从我读过他们似乎处理不同的注解(@Required,@Autowired
等等VS @Component,@Repository,@Service
等),而且从我读过他们注册相同什么bean后置处理器类。
为了更迷惑我,还有一个annotation-config
属性上<context:component-scan>
。
有人可以阐明这些标签吗?有什么相似之处,有什么不同之处,一个被另一个取代,它们彼此完成,我是否需要其中一个?
android – onCreateContextMenu使用ContextMenuInfo的null值调用
我正在尝试使用ContextMenu.
我已经使用SimpleCursorAdapter为一个简单的ListActivity成功完成了这个.
接下来我想用CursorAdapter替换SimpleCursorAdapter但仍然保留ContextMenu行为,所以我添加了两个强制覆盖函数bindView和newView
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mLayoutInflater.inflate(R.layout.check_row, parent, false);
registerForContextMenu(view);
return view;
}
请注意registerForContextMenu,它替换了ListActivity的onCreate方法中的registerForContextMenu(getListView()).我发现有必要调用onCreateContextMenu(…)
所有这些都可行(使用预期的小部件创建的行,对它们的回调等工作等).除了提供给onCreateContextMenu(…)的ContextMenuInfo参数现在为null之外的所有内容 – 停止我访问rowId.
还有其他技巧要做 – 也许是在CursorAdapter的bindView(…)方法中?
解决方法:
我正在回答这个问题 – 但我会指出’commonsware.com’提供了线索和方向,见上文.
问题
– 在行布局中使用CheckBox会影响上下文菜单的使用
– 我相信CheckedTextView是用于多选的,它不适合初始化已检查状态.
我采用的解决方案如下
1.使用CheckedTextView
2.从CursorAdapter扩展到bindView(…)期间初始化检查状态
注意:这必须管理显示正确的图标
3.在onListItemClick(…)中管理CheckedTextView的状态并将其记录在dBase中,不要忘记更新光标.
android.view.ContextMenu.ContextMenuInfo的实例源码
/** * Creates context menu for certain actions on a specific item. */ @Override public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; if (v instanceof ListView) { ListView listView = (ListView) v; Object item = listView.getAdapter().getItem(info.position); if (item instanceof DIDLObject) { selectedDIDLObject = (DIDLObject) item; } } menu.setHeaderTitle(v.getContext().getString( R.string.browse_context_title)); ArrayList<String> menuItems = new ArrayList<String>(); menuItems.add(v.getContext().getString(R.string.browse_context_play_all)); menuItems.add(v.getContext().getString(R.string.browse_context_play)); //menuItems.add(v.getContext().getString( R.string.browse_context_add_to_playplist)); menuItems.add(v.getContext() .getString(R.string.browse_context_download)); for (int i = 0; i < menuItems.size(); i++) { menu.add(Menu.NONE,i,menuItems.get(i)); } }
@Override @SuppressWarnings("unchecked") public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(THIS_FILE,"bad menuInfo",e); return; } HashMap<String,Object> codec = (HashMap<String,Object>) mAdapter.getItem(info.position); if (codec == null) { // If for some reason the requested item isn't available,do nothing return; } boolean isdisabled = ((Short)codec.get(CODEC_PRIORITY) == 0); menu.add(0,MENU_ITEM_ACTIVATE,isdisabled ? R.string.activate : R.string.deactivate); }
/** * Retrieve sip account from a given context menu info pressed * @param cmi The context menu info to retrieve infos from * @return corresponding sip profile if everything goes well,null if not able to retrieve profile */ private SipProfile profileFromContextMenuInfo(ContextMenuInfo cmi) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) cmi; } catch (ClassCastException e) { Log.e(THIS_FILE,e); return null; } Cursor c = (Cursor) getlistadapter().getItem(info.position - getListView().getHeaderViewsCount()); if (c == null) { // For some reason the requested item isn't available,do nothing return null; } return new SipProfile(c); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu,v,menuInfo); final SipProfile account = profileFromContextMenuInfo(menuInfo); if(account == null) { return; } WizardInfo wizardInfos = WizardUtils.getWizardClass(account.wizard); // Setup the menu header menu.setHeaderTitle(account.display_name); if(wizardInfos != null) { menu.setHeaderIcon(wizardInfos.icon); } menu.add(0,account.active ? R.string.deactivate_account : R.string.activate_account); menu.add(0,MENU_ITEM_MODIFY,R.string.modify_account); menu.add(0,MENU_ITEM_DELETE,R.string.delete_account); menu.add(0,MENU_ITEM_WIZARD,R.string.choose_wizard); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { // Would prefer to have this context menu view managed internal to RecentTabsGroupView // Unfortunately,setting either onCreateContextMenuListener or onLongClickListener // disables the native onClick (expand/collapse) behavIoUr of the group view. ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; int type = ExpandableListView.getPackedPositionType(info.packedPosition); int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition); if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { mAdapter.getGroup(groupPosition).onCreateContextMenuForGroup(menu,mActivity); } else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition); mAdapter.getGroup(groupPosition).onCreateContextMenuForChild(childPosition,menu,mActivity); } }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); AdapterView.AdapterContextMenuInfo mi = (AdapterView.AdapterContextMenuInfo)menuInfo; String headerTitle = getContextMenuHeaderTitle(mi.position); if (headerTitle != null) { menu.setHeaderTitle(headerTitle); } List<MenuItemInfo> menus = createContextMenus(mi.id); int i = 0; for (MenuItemInfo m : menus) { if (m.enabled) { menu.add(0,m.menuId,i++,m.titleId); } } }
@Override ContextMenuInfo createContextMenuInfo( View view,int flatListPosition,long id ) { if( isHeaderOrFooterPosition( flatListPosition ) ) { // Return normal info for header/footer view context menus return new AdapterContextMenuInfo( view,flatListPosition,id ); } final int adjustedPosition = getFlatPositionForConnector( flatListPosition ); ExpandableHListConnector.PositionMetadata pm = mConnector.getUnflattenedPos( adjustedPosition ); ExpandableHListPosition pos = pm.position; id = getChildOrGroupId( pos ); long packedPosition = pos.getPackedPosition(); pm.recycle(); return new ExpandableListContextMenuInfo( view,packedPosition,id ); }
@Override public void onCreateContextMenu(ContextMenu menu,View view,view,menuInfo); // Show the name of the file in the header AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo)menuInfo; int position = adapterMenuInfo.position; mActivityFileCursor.movetoPosition(position); String path = mActivityFileCursor.getString(mDataIndex); MetaFile file = MetaFile.from(path); menu.setHeaderTitle(file.getName()); // Add the context menu items menu.add(0,R.string.info,R.string.info); // Save the path,we will need it when an entry of the menu is selected mContextMenuPath = path; }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { if (v.getId() != R.id.accounts_list) { return; } AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; Account account = (Account) adapter.getItem(info.position); menu.setHeaderTitle(account.toString()); String[] menuItems = getResources().getStringArray(R.array.account_actions); for (int i = 0; i < menuItems.length; i++) { menu.add(Menu.NONE,menuItems[i]); } }
public void onCreateContextMenu(ContextMenu menu,menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.volume_list_context,menu); // Change the text of the lock/unlock item based on volume status AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; EDVolume selected = mAdapter.getItem((int) info.id); MenuItem lockItem = menu.findItem(R.id.volume_list_menu_lock); if (selected.isLocked()) { lockItem.setTitle(getString(R.string.menu_unlock_volume)); } else { lockItem.setTitle(getString(R.string.menu_lock_volume)); } }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { try { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; if (info != null) { fileListView.setSelection(info.position,0); } menu.setHeaderTitle(R.string.fman_operation); AdapterIf ca = getlistadapter(); ca.populateContextMenu(menu,info,fileListView.getSelected()); } catch (Exception e) { e.printstacktrace(); } }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu,menuInfo); if (v.getTag() instanceof InputKeyReference) { menu.setHeaderTitle(R.string.what_do_you_want); menu.add(0,KEY_CONTEXT_MENU_CUT,R.string.cut_key); menu.add(0,KEY_CONTEXT_MENU_copY,R.string.copy_key); if (minputKeyRefClipboard.isEmpty() == false) { menu.add(0,KEY_CONTEXT_MENU_PASTE_BEFORE,R.string.paste_before_key); menu.add(0,KEY_CONTEXT_MENU_PASTE_ON,R.string.paste_on_key); menu.add(0,KEY_CONTEXT_MENU_PASTE_AFTER,R.string.paste_after_key); } menu.add(0,KEY_CONTEXT_MENU_CREATE_BEFORE,R.string.create_before_key); menu.add(0,KEY_CONTEXT_MENU_CREATE_AFTER,R.string.create_after_key); menu.add(0,KEY_CONTEXT_MENU_DELETE,R.string.delete_key); menu.add(0,KEY_CONTEXT_MENU_EDIT,R.string.edit_key); // should not use assign,i.e. minputKeyrefunderOpt = v.getTag() // cause minputKeyrefunderOpt and tag may change in different scenarios minputKeyrefunderOpt.copy((InputKeyReference) v.getTag()); } }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; getMenuInflater().inflate(R.menu.folder_context,menu); FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getItem(info.position); menu.setHeaderTitle(folder.displayName); }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); menu.setHeaderTitle(R.string.accounts_context_menu_title); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; BaseAccount account = mAdapter.getItem(info.position); if ((account instanceof Account) && !((Account) account).isEnabled()) { getMenuInflater().inflate(R.menu.disabled_accounts_context,menu); } else { getMenuInflater().inflate(R.menu.accounts_context,menu); } if (account instanceof SearchAccount) { for (int i = 0; i < menu.size(); i++) { android.view.MenuItem item = menu.getItem(i); item.setVisible(false); } } else { EnumSet<ACCOUNT_LOCATION> accountLocation = accountLocation(account); if (accountLocation.contains(ACCOUNT_LOCATION.TOP)) { menu.findItem(R.id.move_up).setEnabled(false); } else { menu.findItem(R.id.move_up).setEnabled(true); } if (accountLocation.contains(ACCOUNT_LOCATION.BottOM)) { menu.findItem(R.id.move_down).setEnabled(false); } else { menu.findItem(R.id.move_down).setEnabled(true); } } }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu,menuInfo); MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.verify_display_fragment_context_menu,menu); }
/** * Retrieve filter id from a given context menu info pressed * @param cmi The context menu info to retrieve infos from * @return corresponding filter id if everything goes well,-1 if not able to retrieve filter */ private long filterIdFromContextMenuInfo(ContextMenuInfo cmi) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) cmi; } catch (ClassCastException e) { Log.e(THIS_FILE,e); return -1; } return info.id; }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); final long filterId = filterIdFromContextMenuInfo(menuInfo); if(filterId == -1) { return; } menu.add(0,R.string.edit); menu.add(0,R.string.delete_filter); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo contextMenuInfo) { if (view instanceof TextView && view == codeText) menu.add(Menu.NONE,view.getId(),Menu.NONE,R.string.sync_request_code_context_copy); else super.onCreateContextMenu(menu,contextMenuInfo); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { assert mPopulator != null; mPopulator.buildContextMenu(menu,v.getContext(),mCurrentContextMenuParams); for (int i = 0; i < menu.size(); i++) { menu.getItem(i).setonMenuItemClickListener(this); } }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { return; } Cursor cursor = (Cursor)getlistadapter().getItem(info.position); if (cursor == null) { // For some reason the requested item isn't available,do nothing return; } // Setup the menu header menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex(ShoppingList.ITEM))); int status = cursor.getInt(cursor.getColumnIndex(ShoppingList.STATUS)); //Add context menu items depending on current state switch (status) { case ShoppingList.OFF_LIST: menu.add(0,MENU_ITEM_ON_LIST,R.string.move_on_list); menu.add(0,MENU_ITEM_IN_TROLLEY,R.string.move_in_trolley); break; case ShoppingList.ON_LIST: menu.add(0,R.string.move_in_trolley); menu.add(0,MENU_ITEM_OFF_LIST,R.string.move_off_list); break; case ShoppingList.IN_TROLLEY: menu.add(0,R.string.move_off_list); break; } // Add context menu items that are relevant for all items menu.add(0,MENU_ITEM_EDIT,R.string.edit_item); menu.add(0,R.string.delete_item); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { Log.v(L.TAG,"ItemsListReactor.onCreateContextMenu()"); AdapterContextMenuInfo ctxMenuInfo = (AdapterContextMenuInfo)menuInfo; ListView listView = (ListView)findViewById(R.id.ItemsListView); ctxItem = (ItemDesc)listView.getItemAtPosition(ctxMenuInfo.position); menu.setHeaderTitle("Item Options"); menu.add(Menu.NONE,EDIT_ITEM,"Edit"); menu.add(Menu.NONE,DELETE_ITEM,"Delete"); String toggleText; if(ctxItem.isstar()) { toggleText = "Remove Star"; } else { toggleText = "Add Star"; } menu.add(Menu.NONE,TOGGLE_STAR,toggleText); if(dataViewer.getListData().size() > 1) { menu.add(Menu.NONE,MOVE_ITEM,"Move To"); } }
@Override public void onCreateContextMenu(ContextMenu menu,"ListsListReactor.onCreateContextMenu()"); AdapterContextMenuInfo ctxMenuInfo = (AdapterContextMenuInfo)menuInfo; ListView listView = (ListView)findViewById(R.id.ListsListView); ctxList = (ListDesc)listView.getItemAtPosition(ctxMenuInfo.position); menu.setHeaderTitle("List Options"); menu.add(Menu.NONE,EDIT_LIST,DELETE_LIST,"Delete"); }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { menu.clear(); menu.add(0,MENU_EDIT,R.string.menu_edit); menu.add(0,MENU_PAUSE,R.string.menu_pause); menu.add(0,MENU_DELETE,R.string.menu_delete); }
@Override protected ContextMenuInfo getContextMenuInfo() { if ((mLongpressedPosition >= 0)) { Spanned text = getText(); int start = mTokenizer.findTokenStart(text,mLongpressedPosition); int end = mTokenizer.findTokenEnd(text,start); if (end != start) { Recipient r = getRecipientAt(getText(),start,end); return new RecipientContextMenuInfo(r); } } return null; }
private void setListViewContextMenuWithDel() { lvMang.setonCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { intCurrDataPos = ((AdapterContextMenuInfo) menuInfo).position; menu.add(0,"删除"); } }); }
private void setListViewContextMenuWithDel_Resume() { lvMang.setonCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu,"删除"); menu.add(0,1,"恢复所有已暂停车次"); } }); }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo)menuInfo; mPosition = adapterMenuInfo.position; ItemData itemData = getItemData(mPosition); if (itemData.type == ITEM_DATA_TYPE_SEParaTOR || itemData.type == ITEM_DATA_TYPE_MESSAGE) { // No contextual menu for separators or messages return; } // Show the name of the file in the header File file = new File(itemData.path); menu.setHeaderTitle(file.getName()); if (itemData.type == ITEM_DATA_TYPE_CURRENT) { // Contextual menu for current subtitles files menu.add(0,R.string.subtitles_wizard_delete,R.string.subtitles_wizard_delete); } else { // Contextual menu for available subtitles files menu.add(0,R.string.subtitles_wizard_associate,R.string.subtitles_wizard_associate); menu.add(0,R.string.subtitles_wizard_delete); } }
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { if (DBG) Log.d(TAG,"onCreateContextMenu"); if ((mCoverRoll != null) && v.equals(mCoverRoll)) { mCoverRoll.createContextMenu(this,menu); } super.onCreateContextMenu(menu,menuInfo); }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); // Todo: fill in rest of method }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); if (v.equals(ocrResultView)) { menu.add(Menu.NONE,OPTIONS_copY_RECOGNIZED_TEXT_ID,"copy recognized text"); menu.add(Menu.NONE,OPTIONS_SHARE_RECOGNIZED_TEXT_ID,"Share recognized text"); } else if (v.equals(translationView)) { menu.add(Menu.NONE,OPTIONS_copY_TRANSLATED_TEXT_ID,"copy translated text"); menu.add(Menu.NONE,OPTIONS_SHARE_TRANSLATED_TEXT_ID,"Share translated text"); } }
public void onCreateContextMenu(ContextMenu menu,menuInfo); MenuInflater inflater = getMenuInflater(); if (mMode == FILE_PICKER_MODE) { inflater.inflate(R.menu.file_picker_context,menu); } else { inflater.inflate(R.menu.file_chooser_context,menu); } }
@Override public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(TAG,e); return; } Cursor cursor = (Cursor) getlistadapter().getItem(info.position); if (cursor == null) { // For some reason the requested item isn't available,do nothing return; } // Inflate menu from XML resource MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.list_context_menu,menu); // Set the context menu header menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE)); // Append to the // menu items for any other activities that can do stuff with it // as well. This does a query on the system for any activities that // implement the ALTERNATIVE_ACTION for our data,adding a menu item // for each one that is found. Intent intent = new Intent(null,Uri.withAppendedpath(getIntent().getData(),Integer.toString((int) info.id) )); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE,new ComponentName(this,NotesList.class),null,intent,null); }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); // Check if running boolean running = false; ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); for (RunningAppProcessInfo info : activityManager.getRunningAppProcesses()) if (info.uid == mAppInfo.getUid()) running = true; PackageManager pm = getPackageManager(); List<String> listPackageNames = mAppInfo.getPackageName(); List<String> listApplicationName = mAppInfo.getApplicationName(); for (int i = 0; i < listPackageNames.size(); i++) { Menu appMenu = (listPackageNames.size() == 1) ? menu : menu.addSubMenu(i,listApplicationName.get(i)); // Launch MenuItem launch = appMenu.add(i,MENU_LAUNCH,getString(R.string.menu_app_launch)); if (pm.getLaunchIntentForPackage(listPackageNames.get(i)) == null) launch.setEnabled(false); // Settings appMenu.add(i,MENU_SETTINGS,getString(R.string.menu_app_settings)); // Kill MenuItem kill = appMenu.add(i,MENU_KILL,getString(R.string.menu_app_kill)); kill.setEnabled(running && PrivacyManager.isApplication(mAppInfo.getUid())); // Play store MenuItem store = appMenu.add(i,MENU_STORE,getString(R.string.menu_app_store)); if (!Util.hasMarketLink(this,listPackageNames.get(i))) store.setEnabled(false); } }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); if (fingerprint != null) { MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.verify_display_fragment_context_menu,menu); } }
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { menu.setHeaderTitle(v.getContext().getString(R.string.browse_context_title)); ArrayList<String> menuItems = new ArrayList<String>(); menuItems.add(v.getContext().getString(R.string.open)); menuItems.add(v.getContext().getString(R.string.exitactivity)); for (int i = 0; i < menuItems.size(); i++) { menu.add(Menu.NONE,menuItems.get(i)); } }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); toBeProcessUser = (EaseUser) listView.getItemAtPosition(((AdapterContextMenuInfo) menuInfo).position); toBeProcessUsername = toBeProcessUser.getUsername(); getActivity().getMenuInflater().inflate(R.menu.em_context_contact_list,menu); }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; Cursor cursor = (Cursor) listView.getItemAtPosition(info.position); if (cursor == null) { return; } getActivity().getMenuInflater().inflate(R.menu.message_list_item_context,menu); menu.findItem(R.id.debug_delete_locally).setVisible(BuildConfig.DEBUG); contextMenuUniqueId = cursor.getLong(uniqueIdColumn); Account account = getAccountFromCursor(cursor); String subject = cursor.getString(SUBJECT_COLUMN); boolean read = (cursor.getInt(READ_COLUMN) == 1); boolean flagged = (cursor.getInt(FLAGGED_COLUMN) == 1); menu.setHeaderTitle(subject); if (selected.contains(contextMenuUniqueId)) { menu.findItem(R.id.select).setVisible(false); } else { menu.findItem(R.id.deselect).setVisible(false); } if (read) { menu.findItem(R.id.mark_as_read).setVisible(false); } else { menu.findItem(R.id.mark_as_unread).setVisible(false); } if (flagged) { menu.findItem(R.id.flag).setVisible(false); } else { menu.findItem(R.id.unflag).setVisible(false); } if (!messagingController.iscopyCapable(account)) { menu.findItem(R.id.copy).setVisible(false); } if (!messagingController.isMoveCapable(account)) { menu.findItem(R.id.move).setVisible(false); menu.findItem(R.id.archive).setVisible(false); menu.findItem(R.id.spam).setVisible(false); } if (!account.hasArchiveFolder()) { menu.findItem(R.id.archive).setVisible(false); } if (!account.hasspamFolder()) { menu.findItem(R.id.spam).setVisible(false); } }
@Override public void onCreateContextMenu(ContextMenu menu,menuInfo); menu.setHeaderTitle(R.string.manage_identities_context_menu_title); getMenuInflater().inflate(R.menu.manage_identities_context,menu); }
ContextMenuInfo createContextMenuInfo(View view,int sectionIndex,int positionInSection,long id) { return new AbsLayoutContainerContextMenuInfo(view,sectionIndex,positionInSection,id); }
public void onCreateContextMenu(ContextMenu menu,ContextMenuInfo menuInfo) { menu.setHeaderTitle("操作"); menu.add(0,"删除"); }
我们今天的关于在附加到NotifyIcon的ContextMenu中延迟单击事件的分享就到这里,谢谢您的阅读,如果想了解更多关于
本文标签: