我正在计划我的第一个真正的Android应用程序,我希望它是一个通用的应用程序(平板电脑和手机).布局将是由前一个列表视图填充的三个列表视图(列表1总是具有相同的项目列表,列表2将基于列表一个选择填充,列表三将基于列表一和两个选择填充) .选择列表3中的项目后,将显示有关该项目的详细信息.仅供参考,数据位于XML文件(包含层次结构)中,详细信息是叶节点.
我计划有两个布局.对于平板电脑,我将在同一屏幕上拥有所有三个列表视图和详细信息.对于手机,我将让每个列表占据整个屏幕,当一个项目处于选中状态时,幻灯片转换到下一个列表视图(导航在顶部以便转到上一个列表以及有关选择的内容的信息(s)来自之前的名单).当选择第三个列表中的项目时,显示详细信息页面,该页面还将有一个重新开始的按钮(即返回到第一个列表视图).
我的平板电脑视图工作得非常好,因为这是最简单的(只有一个屏幕,没有转换) - 所有这些都在layout/main.xml中.我也为不同大小的屏幕(布局,布局大,布局小,布局-xlarge)提供了不同的布局,所有这些布局都具有完全相同的main.xml.
所以,最后我的问题...如何在具有不同用户体验的同时使用相同的代码填充列表?我可以看到两个选项(请添加更多/更好的选项)
对于手机,我是否应该继续拥有一个布局文件(main.xml),并且只需将所有三个列表和详细信息放在彼此之上并通过幻灯片转换显示/隐藏小部件?(即,首先只有第一个列表视图可见,第二个列表视图被隐藏,第三个列表视图被隐藏,细节被隐藏)
我应该为手机上的每个屏幕都有一个布局xml(main.xml - 初始列表视图,list2.xml,list3.xml和details.xml)?
为了确定它是否是平板电脑,我计划使用Google I/O应用程序中的代码
开发通用Android应用程序(手机和平板电脑)
编辑(2011/11/29)
找到一些关于碎片的好的在线资源:
http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html
http://portabledroid.wordpress.com/2011/06/22/25/
http://portabledroid.wordpress.com/2011/06/23/multi-platform-fragments-part-ii/
以及随附的视频:http:
//www.youtube.com/手表?ν= 4BKlST82Dtg
在我的应用程序的平板电脑布局中,我有三个ListFragments和一个常规Fragment,我们称之为Make,Model,Size和Details.最初填充Make列表,然后根据Make选择,填充Model列表; 选择模型时,将填充"大小"列表; 选择"大小"时,将显示"详细信息".这些事件中的每一个(列表项选择)都是通过onListItemClick处理程序处理的.
在启动时,我想填充Make列表,选择列表中的第一个Make并让它通过onListItemClick处理程序来填充Model列表(依此类推,以便填充所有列表并显示详细信息 - 这也应该是在任何列表中进行任何选择时的行为 - 选择下一个列表中的第一个项目,直到我们显示详细信息).请注意,我可以控制DB,对于每个Make,总会有至少一个Model,每个Make/Model至少有一个Size,每个Make/Model/Size只有一个Detail.
所以,我想选择列表中的第一项并让它触发onListItemClick处理程序.我已经尝试了以下(使用适当的边界检查等),但它不起作用.
getListView().setItemChecked(0, true);
Run Code Online (Sandbox Code Playgroud)
对"开箱即用"ListFragment的唯一更改是将CacheColorHint设置为这样
getListView().setCacheColorHint(R.color.GhostWhite);
Run Code Online (Sandbox Code Playgroud)
其中GhostWhite在styles.xml中设置为
<color name="GhostWhite">#88FFFFFF</color>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
提前致谢.
这是我的错误消息
分析器错误消息:基类包括字段"iframeShim",但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls.HtmlIframe)不兼容.
来源错误:
Line 180: <iframe runat="server" id="iframeShim" frameborder="0" scrolling="no" style="position: absolute;
Line 181: display: block; z-index: 990; z-index: 990" src="~/blank.html"></iframe>
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET 4.0
版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.34249
设计师代码是:
protected global::System.Web.UI.HtmlControls.HtmlGenericControl iframeShim;
Run Code Online (Sandbox Code Playgroud)
我完成的搜索显示,当您升级到.NET 4.5并且服务器端变量的类型未正确更新(需要,而HtmlIframe不是HtmlGenericControl)时,这通常是一个错误.此外,这些搜索的分析器错误消息略有不同(这在4.5中运行时有意义) - 他们的消息是:
...但其类型(System.Web.UI.HtmlControls.HtmlIframe)与控件类型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容.
我在web.config中的targetFramework是:
<compilation targetFramework="4.0">
Run Code Online (Sandbox Code Playgroud)
所以,我不确定这里发生了什么.有任何想法吗?注意,我已经安装了VS2012,最近不得不回到VS2010项目并做一些工作,这开始发生了.我立即认为这是一个.NET版本问题,但是一切仍然显示我在这个VS2010项目中使用.NET 4.0.
该系统是与WCF REST Web服务通信的Flex应用程序.我正在尝试将文件从Flex应用程序上传到服务器并遇到一些问题,我希望有人可以帮忙.我在Flex应用程序中使用FileReference来浏览和上传此处定义的文件:
http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/
然后,我在WCF REST Web服务中使用流(在调试器中显示为System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream)接收文件(使用WCF 4 REST服务的项目类型)
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
// TODO: just hardcode filename for now
var filepath = HttpContext.Current.Server.MapPath(@"~\_test\testfile.txt");
using (Stream file = File.OpenWrite(filepath))
{
CopyStream(data, file);
}
}
private static void CopyStream(Stream input, Stream output)
{
var buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:此帖子中使用的CopyStream方法:如何将流保存到C#中的文件?
该文件保存没有任何问题.我遇到的问题是该文件包含的信息比我想要的多.以下是保存文件的内容(源文件仅包含"这是文件的内容"):
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filename"
testfile.txt …Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery验证来验证一个带有单选按钮的表单(set =这个例子中的两个单选按钮).带标签的单选按钮如下.该表单位于jQueryUI对话框中.
<input type="radio" name="chooseMe" value="Yes" id="radio_yes" /><label for="radio_yes">Yes</label>
<input type="radio" name="chooseMe" value="No" id="radio_no" /><label for="radio_no">No</label>
Run Code Online (Sandbox Code Playgroud)
我从jquery.com http://docs.jquery.com/Plugins/Validation/validate上的验证插件页面抓取了突出显示/ unhighlight代码
(转到"选项"选项卡并搜索"unhighlight")
highlight: function (element, errorClass, validClass) {
$(element).addClass(errorClass).removeClass(validClass);
$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass(errorClass).addClass(validClass);
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
},
Run Code Online (Sandbox Code Playgroud)
我遇到的第一个问题是根据需要进行验证时,只会突出显示"是"标签.
第二个问题是如果我不解决验证问题并取消jQueryUI对话框,然后返回到对话框,"是"标签完全消失.
要解决第一个问题,我想要做的是突出显示"是"和"否"标签.因此,在处理突出显示代码时,我需要从元素id获取输入的名称("chooseMe"),然后从该名称获取与该名称相关联的所有id("radio_yes"和"radio_no") ,突出显示所有标签.当然,那就是unhighlight代码的反面.
由于我在表单中有几个单选按钮集,我需要这是通用的(没有硬编码"chooseMe"等)
这听起来合理吗?如果是这样,唯一的问题是我不知道该怎么做:)
提前致谢.
jsFiddle按要求:http:
//jsfiddle.net/Bd688/4/
尝试将数组连接到Linq-to-EF查询时出现以下错误
执行命令定义时发生错误.有关详细信息,请参阅内部异常 SQL语句的某些部分嵌套得太深.重写查询或将其分解为较小的查询.
代码如下:
var vids = new List<string>();
using (var ctx = new MyDbContext())
{
var qry = ctx.Pickups.Where(p => p.UserName == User.Identity.Name);
if (someBoolean)
{
var v = GetVids(); // get the list of Ids from a web service
vids.AddRange(v);
}
if (vids.Count() > 0)
{
qry = qry.Join(vids, p => p.VId, v => v, (v, p) => p);
}
var data = qry
.Select(p => new
{
// etc.
});
}
Run Code Online (Sandbox Code Playgroud)
问题是Web服务与我使用EF的数据库没有关联,否则,我只是对数据库中的表进行连接.我从网络服务中回来的Id的数量可能超过一百(通常是5-10).如果我注释掉Join,代码工作正常,所以我知道错误在Join中.只有少数(最多约30个)id中的id,连接工作完美.
您建议如何解决此问题?我唯一能想到的是将ID列表插入数据库并以这种方式进行连接.这对我来说似乎不太吸引人.
我不久前发布了类似的问题,现在我需要更新此代码,我回来问一个后续问题.上一个问题在这里:
基于可空列的计算列
我的数据(Address1, Address2, City, State, Zip, Country)可能包含不完整的信息.即我不能保证除了State和Country列之外的任何东西都有数据.
我想有一个计算列FullAddress.
以前,我使用过COALESCE,如果填写了所有字段,那么效果很好.现在,随着数据要求的放宽,这已不再是一个选项(因为我们以重复的逗号结尾FullAddress).这是我以前使用的(注意,我只是在这里使用SELECT语句以方便使用 - 一旦我有适用于所有情况的东西,将转换为计算列"alter table add"语句):
SELECT (((((COALESCE([Address1],'')
+ COALESCE(', '+[Address2],''))
+ COALESCE(', '+[City],''))
+ COALESCE(', '+[State],''))
+ COALESCE(', '+[Zip],''))
+ COALESCE(', '+[Country],'')) AS FullAddress
FROM Locations
Run Code Online (Sandbox Code Playgroud)
现在,我已经使用了一个替代方法CASE,但它仍然不适用于边缘情况Address1 is NULL(问题是FullAddress它将具有','作为前两个字符)
SELECT CASE WHEN [Address1] IS NOT NULL THEN [Address1] ELSE '' END
+ CASE WHEN [Address2] IS NOT NULL THEN ', ' …Run Code Online (Sandbox Code Playgroud) 我正在寻找以下的jQuery翻译:
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
anchor.target = "_blank";
}
}
window.onload = externalLinks;
Run Code Online (Sandbox Code Playgroud)
取自以下网站:http:
//articles.sitepoint.com/article/standards-compliant-world/3
我从这样的事情开始,但不知道如何搜索rel属性(没有遍历所有锚点):
$(document).ready(function () {
$('body').find('a').findTheRelTagWithExternalValue;
});
Run Code Online (Sandbox Code Playgroud)
谢谢, -
埃德
我正在从Linq-to-SQL切换到Linq-to-Entities并且在转换过程中遇到错误"LINQ to Entities无法识别方法'System.String Format(System.String,System.Object ,System.Object)'方法,并且此方法无法转换为商店表达式".以下代码是罪魁祸首.我知道这必须使用我在下面使用的动态类型生成.我怎样才能使用动态类型并使用L2E?
var query = _db.Persons.Where(p => p.PersonId == PersonId);
if (query.Count() > 0)
{
var data = query.Join(_db.Users, p => p.UserId, u => u.UserId, (p, u) => new
{
Id = p.PersonId,
Name = string.Format("{0} {1}", p.FirstName, p.LastName),
Phone = p.Phone,
Email = u.Email
}).Single();
return data;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
好的,在@John Hartsock向我展示简单的解决方案之后感觉有点愚蠢...
如果我想做一些更复杂的字符串操作怎么办?
我有一张行表.在其中一列中,某些行具有带静态文本的跨度,某些行具有可供选择的值的选择.该列中的所有元素都具有相同的名称属性.在我的表单提交中,我遍历行并想要获取所有列的值.我希望有一个jQuery选择器语句来获取该元素的值(span或select,name属性为"materialValue").我怎么用jQuery做到这一点?以下是html片段.
<table>
<tr><td>
<span id="materialValue1" name="materialValue>ONE</span>
</td></tr>
<tr><td>
<span id="materialValue2" name="materialValue>TWO</span>
</td></tr>
<tr><td>
<select id="materialValue3" name="materialValue>
<option>ONE</option>
<option>TWO</option>
<option>THREE</option>
</select>
</td></tr>
<tr><td>
<select id="materialValue4" name="materialValue>
<option>ONE</option>
<option>TWO</option>
<option>THREE</option>
</select>
</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
编辑:我习惯于使用属性名称/值指定元素类型和方括号.我不知道如何在没有元素类型名称的情况下指定jquery选择器.例如$('span[name="materialValue"]', this).指定是否合法$('[name="materialValue"]', this)?对我来说很奇怪.
这工作正常(从初始测试).
由于方法链接是我的首选格式,我试图弄清楚链接等效方法是什么,但没有运气.有任何想法吗?
var data = (from p in db.Persons
from c in db.Companies
where c.CompanyName == companyName && p.CompanyId == c.CompanyId
select p)
.Select(p => new
{
Id = p.PersonId,
Name = string.Format("{0} {1}", p.FirstName, p.LastName)
});
Run Code Online (Sandbox Code Playgroud)
谢谢, -
埃德
我从CodePlex上的这个例子开始使用IQueryable扩展方法.
我认为我需要的是一个IQueryable扩展方法到"Where",方法签名如下所示:
public static IQueryable<T> Where<T>(this IQueryable<T> source, string columnName, string keyword)
Run Code Online (Sandbox Code Playgroud)
并有效地做到这一点(假设T.columnName的类型为string):
source.Where(p => p.ColumnName.Contains("keyword"))
Run Code Online (Sandbox Code Playgroud)
使用上面的CodePlex示例,我想我理解他如何使OrderBy方法工作,但我的问题似乎有点复杂,我不知道如何让Contains("关键字")部分工作.
提前致谢,
--ed
更新:9/13/2010太平洋标准时间下午6:26
我认为以下内容可行,但最终得到一个NotSupportedException(LINQ to Entities中不支持LINQ表达式节点类型'Invoke'.)当我通过Count()执行表达式时.有任何想法吗?
public static IQueryable<T> Where<T>(this IQueryable<T> source, string columnName, string keyword)
{
var type = typeof(T);
var property = type.GetProperty(columnName);
if (property.PropertyType == typeof(string))
{
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var sel = Expression.Lambda<Func<T, string>>(propertyAccess, parameter);
var compiledSel = sel.Compile();
return source.Where(item => compiledSel(item).Contains(keyword));
}
else
{
return source;
}
}
Run Code Online (Sandbox Code Playgroud)