我在非Java和非Android领域拥有丰富的经验,我正在学习Android.
我对不同领域有很多困惑,其中之一就是如何处理按钮点击.至少有4种方法(!!!),这里简要列出
为了保持一致性,我将列出它们:
View.OnClickListener在活动中拥有该类的成员,并将其分配给将onClick在onCreateactivity方法中处理逻辑的实例.
在'onCreate'活动方法中创建'onClickListener'并使用setOnClickListener将其分配给按钮
在活动本身中实现'onClickListener'并将'this'指定为按钮的监听器.对于活动按钮很少的情况,应该分析按钮ID以执行适当按钮的'onClick'处理程序
对实现'onClick'逻辑的活动有公共方法,并将其分配给activity xml声明中的按钮
问题#1:
这些都是方法,还有其他选择吗?(我不需要任何其他的,只是好奇)
对我来说,最直观的方式是最新的方式:它需要输入最少量的代码并且是最可读的(至少对我而言).
虽然,我没有看到这种方法被广泛使用.使用它有什么用处?
问题2:
每种方法的优缺点是什么?请分享您的经验或良好的链接.
欢迎任何反馈!
PS我试过谷歌并找到了一些关于这个话题的东西,但我发现的唯一的东西就是描述"如何"做到这一点,而不是为什么它好或坏.
昨天我已经实现了代码:
CustomerProductManager productsManager = container.Resolve<CustomerProductManager>();
Run Code Online (Sandbox Code Playgroud)
它是可编辑和工作的.
今天(可能是我修改了一些东西)我经常收到错误:
非泛型方法'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type,string,params Microsoft.Practices.Unity.ResolverOverride [])'不能与类型参数一起使用
我的同事有相同的源代码,没有相同的错误.为什么?如何解决问题?
PS
行"使用Microsoft.Practices.Unity;" 存在于使用部分.
我试图用非泛型版替换泛型版:
CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager));
Run Code Online (Sandbox Code Playgroud)
并得到另一个错误:
方法'Resolve'没有重载需要'1'参数
It seems like one of the assemblies is not referenced.. but which one? I have 2 of them referenced: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll
P.P.S. I've saw similar problem http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 but it is resolved as "not a bug"
Any thought will be helpful
这是我的单例模式的自定义类.在这段代码中,我使用双重检查锁定如下.当我在某些源上阅读很多帖子时,他们说双重检查很有用,因为它可以防止两个并发线程同时运行产生两个不同的对象.
public class DoubleCheckLocking {
public static class SearchBox {
private static volatile SearchBox searchBox;
// private constructor
private SearchBox() {}
// static method to get instance
public static SearchBox getInstance() {
if (searchBox == null) { // first time lock
synchronized (SearchBox.class) {
if (searchBox == null) { // second time lock
searchBox = new SearchBox();
}
}
}
return searchBox;
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然不太了解上面的代码.如果两个线程在实例为空时一起运行相同的代码行,会出现什么问题?
if (searchBox == null) {
synchronized (SearchBox.class) {
if (searchBox == null) {
searchBox = …Run Code Online (Sandbox Code Playgroud) 在邻居帖子中:ViewModel应如何关闭表单? 我发布了如何使用MVVM关闭Windows的愿景.现在我有一个问题:如何打开它们.
我有一个主窗口(主视图).如果用户单击"显示"按钮,则应显示"演示"窗口(模态对话框).使用MVVM模式创建和打开窗口的首选方法是什么?我看到两种一般方法:
第一个(可能是最简单的).事件处理程序"ShowButton_Click"应该在主窗口的代码中实现,方式如下:
private void ModifyButton_Click(object sender, RoutedEventArgs e)
{
ShowWindow wnd = new ShowWindow(anyKindOfData);
bool? res = wnd.ShowDialog();
if (res != null && res.Value)
{
// ... store changes if neecssary
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法:
在MainWindowViewModel中,我们将实现"ShowCommand"属性,该属性将返回命令的ICommand接口.Comman反过来:
这种方法将更适合MVVM,但需要额外的编码:ViewModel类不能"显示对话框",因此MainWindowViewModel只会引发"ShowDialogEvent",MainWindowView我们需要在其MainWindow_Loaded方法中添加事件处理程序,这样的事情:
((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
Run Code Online (Sandbox Code Playgroud)
(ShowDialog - 类似于'ModifyButton_Click'方法.)
所以我的问题是:1.你看到其他任何方法吗?你认为其中一个是好还是坏?(为什么?)
欢迎任何其他想法.
谢谢.
能够在没有明确指定已更改属性的名称的情况下引发"PropertyChanged"事件是一件好事.我想做这样的事情:
public string MyString
{
get { return _myString; }
set
{
ChangePropertyAndNotify<string>(val=>_myString=val, value);
}
}
private void ChangePropertyAndNotify<T>(Action<T> setter, T value)
{
setter(value);
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(setter.Method.Name));
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,收到的名称是lambda方法的名称:"<set_MyString> b__0".
谢谢.
我有以下代码:
CSS部分:
<style type="text/css">
.menu
{
width:200px;
}
.menu ul
{
list-style-image:none;
list-style-type:none;
}
.menu li
{
margin:2px;
}
.menu A
{
height:25px;
width:170px;
background:url(./images/button-51.png);
padding:2px 5px ;
}
.menu A:link
{
height:25px;
width:170px;
background:url(./images/button-51.png);
padding:2px 5px ;
}
</style>
Run Code Online (Sandbox Code Playgroud)
HTML部分:
一切正常,但是当我在HTML文档的开头添加'DOCTYPE'元素时:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)
不考虑'a'元素的宽度.
问题1:为什么?
问题2:如何解决这个问题?
非常感谢!
enum MyEnum
{
Invalid=0,
Value1=1,
Value1=2,
}
void main ()
{
MyEnum e1 = MyEnum.Value1;
int i1 = 2;
// Is there any difference how to compare enumEration values with integers?
if ( e1==(MyEnum)i1 )... // 1st
if ( (int)e1==i1 )... // 2nd
Run Code Online (Sandbox Code Playgroud)
在每个提到的案例中,我们将enum转换为int或int转换为enum.
这些转换(性能,还是其他)有什么不同吗?或者他们是完全一样的?
谢谢.
PS在当前的例子中我比较'魔术数'但在实际应用中我从DB的整数字段获取数据.
在我的本地笔记本电脑上发生了一些奇怪的事情:我在本地工作了很长时间的网站没有启动......
尝试本地化问题我创建了一个只有'index.html'文件的简单网站.它在ASP.NET 2.0下工作正常,但当我将App Pool切换为使用4.0时 - 它停止工作.
当我在浏览器中打开网站时,它显示以下错误:
暂停服务
http错误503服务不可用.
并导致App池停止工作...在系统事件登录"应用程序"部分我有:
工作进程无法正确初始化,因此无法启动.数据是错误的.
请指教.在Google中找不到任何相关内容...... :(
PS我有VS2010,Windows Vista x64,安装了最后更新,还安装了VS SP1 ...