我目前正忙着使用新的AppCompat库,为旧设备带来材料设计.
将工具栏设置为操作栏对我来说很好,但工具栏似乎在调用时没有做任何事情inflateMenu(int resId)
.从文档中,我认为这是替换getMenuInflater().inflate(int resId)
来自onCreateOptionsMenu的调用.如果我做后者,菜单项正确膨胀并添加到工具栏,但inflateMenu似乎没有.
我错过了什么?
活动代码:
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.inflateMenu(R.menu.main); // this does nothing at all
setSupportActionBar(toolbar);
}
// this works
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我试图从string.xml格式化一个字符串,以重用它与几个值.我遇到了一些问题,因为String还应该包含格式化程序使用的百分比符号.我已经尝试用它的unicode表示替换%符号,但这似乎不起作用:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="teststring">The new value is %1$s%</string>
<string name="teststring2">The new value is %1$s\u0025</string>
<string name="teststring3">The new value is %1$s</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
Java代码:
String value = "25";
String formattedString = context.getResources().getString(R.string.teststring), value);
Run Code Online (Sandbox Code Playgroud)
在这个例子中.teststring和teststring2将产生错误,而teststring3工作正常.什么是正确的方法将%符号放在xml-string中以获得"新值为25%"作为格式化字符串?
谢谢你的帮助.
堆栈跟踪:
FATAL EXCEPTION: main
java.util.UnknownFormatConversionException: Conversion:
at java.util.Formatter$FormatSpecifierParser.unknownFormatConversionException(Formatter.java:2304)
at java.util.Formatter$FormatSpecifierParser.advance(Formatter.java:2298)
at java.util.Formatter$FormatSpecifierParser.parseConversionType(Formatter.java:2377)
at java.util.Formatter$FormatSpecifierParser.parseArgumentIndexAndFlags(Formatter.java:2348)
at java.util.Formatter$FormatSpecifierParser.parseFormatToken(Formatter.java:2281)
at java.util.Formatter.doFormat(Formatter.java:1069)
at java.util.Formatter.format(Formatter.java:1040)
at java.util.Formatter.format(Formatter.java:1009)
at java.lang.String.format(String.java:1988)
at android.content.res.Resources.getString(Resources.java:343)
at (... and so on)
Run Code Online (Sandbox Code Playgroud)
--EDIT--感谢您的帮助.正确的答案是
<string name="teststring">The new value if %1$s%%</string>
Run Code Online (Sandbox Code Playgroud)
不得设置formatted ="false".
是否有任何性能差异
Rails.cache.fetch("key") { Model.all }
Run Code Online (Sandbox Code Playgroud)
和
models = Rails.cache.read("key")
if models.nil?
models = Model.all
Rails.cache.write("key", models)
end
Run Code Online (Sandbox Code Playgroud)
如果我必须猜测,我会说上面的只是另一个的简写.
以下表格表示此问题涉及的应用程序中的工作流程.
我遇到OutOfMemory错误的问题,主要是因为用户能够多次从活动B切换到活动D(他们在每次尝试时显示不同的内容),而不会破坏先前的活动.这导致了一个非常大的backstack导致OutOfMemory错误.
为了避免这种情况,我遵循了建议,在清单中添加父活动,并使用TaskStackBuilder类创建新的backstack:
void openDFromB()
{
Intent i = new Intent(this, ActivityD.class);
TaskStackBuilder.create(this)
.addParentStack(ActivityD.class)
.addNextIntent(i)
.startActivities();
}
Run Code Online (Sandbox Code Playgroud)
如果用户现在从活动B切换到D,则销毁MainMenu,A和B并创建新的Backstack(MainMenu,C,D).这解决了api级别大10的内存问题,但不幸的是,TaskStackBuilder没有为pre api 11设备创建后台堆栈.
知道如何做以避免用户在api 11之前堆叠无限量的活动吗?这是否可能,或者我应该尝试在onPause中释放尽可能多的资源,以便在OoM之前获得最大量的堆叠活动?
提前致谢!
如何通过样式设置LinearLayout的TextView子项的样式.像这样的东西:
<style name="MyLinearayoutStyle" parent="MyParentStyle">
<item name="android:background">@drawable/mybackground</item>
<item name="android:padding>5dp</item>
// Here i need to define my textview style
</style>
<style name="MyTextViewStyle> parent="AnotherParentStyle">
<item name="android:textColor">@color/Black</item>
<item name="android:textSize">15sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我尝试了android:TextAppearance和android:textStyle,但这没有用.
rails中基于文件的缓存的文档说:
请注意,除非您定期清除旧条目,否则缓存将增长,直到磁盘已满.
不幸的是,它没有提供有关如何定期清除旧条目的任何信息.为:expires_in
工作设置合适的值还是在清除缓存后还有其他一些黑魔法?
此外,该文档提供了一个限制基于内存的缓存大小的选项:
config.cache_store = :memory_store, { size: 64.megabytes }
Run Code Online (Sandbox Code Playgroud)
这是否也适用于基于文件的缓存?更重要的是,当缓存增长低于该大小限制时会发生什么?它是删除旧的缓存值还是会抛出某种异常?
提前谢谢,danijoo
因此,根据我的理解,Android 应用程序深度链接的工作原理如下:您有一个包含多个页面的网站。对于每个页面,您定义一个深层链接。如果搜索词匹配,这将使应用程序显示在谷歌搜索中而不是网站中。
例如,如果我添加一个指向http://example.com/entry/entryname的深层链接,并且有人在 google 上搜索“example entryname”,他会看到指向应用程序而不是网站的深层链接。
我的问题是,是否也可以将您的应用程序以“类似深度链接的样式”添加到谷歌搜索而无需网页?在本例中,我有一个应用程序显示特定主题的多个类似维基百科的条目。我还拥有该应用程序对应的域名。现在,如果用户搜索该主题并且我的应用程序有给定搜索词的条目,我希望我的应用程序出现在谷歌搜索中。
即:用户搜索“示例条目名称” - >谷歌搜索显示我的应用程序的深层链接,尽管没有http://example.com/entry/entryname
预先感谢,danijoo
我租了一个小型 tomcat 服务器,通过 dailyRazor 上的 jsp 为 Android 应用程序提供 http-get 服务。最大 Java 堆为“最大内存:92.81 MB”。
maxThreads 的默认 tomcat 设置为 25。随着使用我的服务的用户数量的增长,我在黄金时间收到大量服务器的拒绝连接/超时(我认为这是因为线程池太小)。这就是为什么我将 maxThreads 增加到 250。在这个晚上,服务器崩溃了,向我显示了多个 java.lang.OutOfMemoryError 。250 对于小堆来说似乎有点重:p 我暂时将 maxThreads 减少到 50,这似乎很好,因为我没有再收到任何错误。
由于我对 tomcat 不太了解,我想询问一个好方法来找到正确的 maxThreads 数。我考虑查看一个线程的最大内存使用量。那么 maxThreads = (maxMemory / memoryOfOneThread)。有更好的解决方案吗?
谢谢达尼乔
我目前正在开发一个应用程序,它提供一些临时静态但经常更改的数据.你可以把它想象成电话簿.大多数条目可能永远不会改变,但可能会有人改变电话号码或进/出的情况.数据集不大,但必须随时可用.
我的第一个想法是实现一个clientide-SQLDatabase,它在一定的时间间隔内查询后端,要求更新(存储在后端服务器上的另一个数据库中).如果自上次查询以来有更新,则更新的数据将被发送并存储在本地sqldatabase中.
现在我偶然发现了这个有趣的数据库模型Couchbase.到目前为止,我还没有完全看透它,如果我得到它,我可以使用它来保持客户端数据库与服务器数据库同步.这是沙发基地的用例还是应该采用其他策略?
提前致谢!
我有一个显示10张图像的小部件。单击该图像之一后,它将打开一个活动,其中显示了与该图像对应的一些信息。数据存储在sqlite日期库中。
每周,这些图像都会更改(其包含100多个不同对象的池,每周显示这些对象的另一个子集)。
我的onUpdate方法看起来像这样:
List<Champion> champions = // a list of 10 champions out of 100 fetched from db
int[] imageIds = // drawable ids for the 10 champions
// creating the pending intents
PendingIntent[] pIntents = new PendingIntent[champions.size()];
for(int i = 0; i < champions.size(); i++)
{
Intent intent = new Intent(context, ChampionActivity.class);
intent.putExtra(ChampionActivity.KEY_ID, champions.get(i).getChampionId());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
pIntents[i] = PendingIntent.getActivity(context, i, intent, 0);
}
// updating widgets with the new images and intents
for(int widgetId : appWidgetIds)
{
RemoteViews view = …
Run Code Online (Sandbox Code Playgroud)