关于你是否应该使用Activities或者,有很多讨论Fragments.例如:
我发现的大多数讨论都是在Android 4.2之前发布的.
在Android 4.2中,Google发明了嵌套片段.
因此,我实际上看不出任何理由再使用多个Activity.
在早期阶段,Fragments它们应该在应用程序中用于同时以舒适的方式支持平板电脑和智能手机.
因此,例如,您ListView可以View在点击某个项目时打开详细信息.在智能手机上,我们将替换ListView并显示详细信息View.而平板电脑,而不是用细节替代列表视图可以同时显示Views在同一时间.
现在有了嵌套,Fragments还有很多其他的可能性.如果您想使用单个Activity,您可以在其中存储一般信息,Activity并且每个Fragment人都可以访问它.
除此之外,Fragments谁嵌套Fragments,也可以为他们的孩子存储信息Fragments.
随着Fragments我可以轻松地重用Views,我可以同时显示多个,我可以轻松地Fragment形成一个对话框Fragment.这一切都可能只需要一些复制和粘贴操作.
如果我使用,Activities我认真地必须改变很多才能完成这项工作.
我最近实现了一个应用程序,我可以轻松使用两个Fragment-ViewPager来实现非常漂亮和动态的东西(某种:今天的信息 - 昨天的信息).在我看来,Fragments让我们的生活变得更轻松:)
问题:
Activity …我想知道WhatsApp如何处理每条消息中显示的时间.
对于那些不知道的人:
用a RelativeLayout和toLeftOfI得到1)但不是2)因为前面的行会在时间视图的位置被"切断".相同的行为如果我使用LinearLayout.
所以我尝试在文本和时间之间使用FrameLayout或RelativeLayout没有任何连接.
但是,如果文本只要消息视图很大,则两个视图都会重叠.如果我在邮件中添加空白字符,我就没有时间在右边.
他们真的有一些text-wrapping-lib,或者只能用布局吗?
这是请求的截图:

简短的问题:我的资源中有一个字符串:"这是我的测试字符串{0} \n \nTest"
我正在尝试在我的Messagebox中显示此字符串:
MessageBox.Show(String.Format(Properties.Resources.About,
Constants.VERSION),
Properties.Resources.About_Title, MessageBoxButton.OK,
MessageBoxImage.Information);
Run Code Online (Sandbox Code Playgroud)
但是我没有得到新的台词.\n仍然显示为字符,而不是新行.
我也尝试使用像mystring.Replace("\n",Environment.NewLine)这样的解决方法,但这也没有改变任何东西.
我究竟做错了什么?
编辑:有趣的事情提到:替换("\n","somethingelse")不会改变任何东西.
编辑2:Shift + Enter在我的资源文件而不是\n似乎工作...无论如何奇怪的行为
我有一个Java 7 Spring Boot(1.5.4)RESTfull服务,其端点返回DeferredResult:
@RequestMapping(value = "/download/{templateName:.+}")
public DeferredResult<ResponseEntity> download(@PathVariable final String templateName,
@RequestParam final Map<String, Object> args) {
final DeferredResult<ResponseEntity> result = new DeferredResult<>();
try {
// it returns a RxJava Observable
final ReportService reportService = getReportService(templateName);
reportService.process(templateName, args).subscribe(new Consumer<byte[]>() {
public void accept(byte[] bytes) throws Exception {
HttpHeaders header = new HttpHeaders();
header.setContentType(new MediaType("application", MEDIA_TYPE_SPREADSHEET));
header.setContentDispositionFormData("attachment", templateName);
InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(bytes));
result.setResult(ResponseEntity.ok().headers(header).body(resource));
}
}, new Consumer<Throwable>() {
public void accept(Throwable e) throws Exception {
result.setResult(ResponseEntity.badRequest().build());
// …Run Code Online (Sandbox Code Playgroud) 不知道为什么,但我从playstore中的应用程序收到一些错误报告,其中包含以下消息:
java.lang.IllegalStateException: Fragment NewsOverViewFragment{4062e840} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:601)
at de.dala.simplenews.ui.NewsOverViewFragment.shouldUseMultipleColumns(NewsOverViewFragment.java:153)
at de.dala.simplenews.ui.NewsOverViewFragment.updateMenu(NewsOverViewFragment.java:145)
at de.dala.simplenews.ui.NewsOverViewFragment.onCreateOptionsMenu(NewsOverViewFragment.java:139)
Run Code Online (Sandbox Code Playgroud)
我已经做了一个修复并检查片段是否附加到活动,但这只是"避免"问题.在我看来,在onCreateOptionsMenu或onOptionsItemSelected中获取未附加状态应该永远不会发生.
为什么会发生这种情况?片段如何在不附加到活动的情况下调用onCreateOptionsMenu/onOptionsItemSelected?
问候
码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.news_overview_menu, menu);
updateMenu();
super.onCreateOptionsMenu(menu, inflater);
}
private void updateMenu(){
boolean useMultiple = shouldUseMultipleColumns();
...
}
private boolean shouldUseMultipleColumns(){
boolean useMultiple = false;
Configuration config = getActivity().getResources().getConfiguration();
switch (config.orientation) {
case android.content.res.Configuration.ORIENTATION_LANDSCAPE:
useMultiple = PrefUtilities.getInstance().useMultipleColumnsLandscape();
break;
case android.content.res.Configuration.ORIENTATION_PORTRAIT:
useMultiple = PrefUtilities.getInstance().useMultipleColumnsPortrait();
break;
}
return useMultiple;
}
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,我现在检查片段是否附加,然后调用shouldUseMultipleColumns()哪个修复了问题,但没有解释为什么首先调用它...
Edit2:我的活动
@Override
protected …Run Code Online (Sandbox Code Playgroud) 对不起,我的英语不好.我有以下问题:

让我们说我的移动设备的相机正在显示这张照片.
在图片中,您可以看到4个不同的位置.我知道每个位置(经度,纬度).
现在我想知道,图中的具体位置在哪里.例如,我想在前面20米处和我左边5米处有一个矩形.我只知道这一点的纬度/经度,但我不知道,我必须把它放在图片的内部(x,y).例如,在我看来,POS3位于(0,400).POS4为(600,400),依此类推.
我必须在哪里放置新点,前面20米,左边5米?(所以我的输入是:(LatXY,LonXY),我的结果应该是(x,y)在屏幕上)
我还得到了摄像机的高度以及摄像机的x,y和z轴的角度.
我可以使用简单的数学运算来解决这个问题吗?
非常感谢你!
android coordinate-systems augmented-reality coordinate-transformation android-camera
想象一下以下要求:
@POST("/recipes/create")
void createRecipe(@Query("recipe") Recipe recipe, Callback<String> callback);
Run Code Online (Sandbox Code Playgroud)
我想要json(食谱),但不幸的是我的请求只是调用toString()为我的食谱,它根本不起作用.
我可以覆盖Recipe中的toString,但我宁愿有一个通用的解决方案.
我不能使用@Body,因为我需要指定,我发送的内容(我需要"recipe = json(theRecipe)").
我也无法更改序列化以添加"recipe =",因为我不负责服务器.
目前我正在使用QueryMap Map,我放入了一个序列化对象.虽然这有效,但在我看来,这不是一个非常好的解决方案.
我可以以某种方式拦截改装适配器吗?
我读了一些关于TaskCancellations的线程.但是,我找不到一个简单问题的解决方案:当我的任务失败时如何获得默认值?
我不能(!)修改任务本身并在它周围放置一个try catch包装器.我当然可以试试看,但是ContinueWith如果可能的话,我想处理这个问题.
public Task<List<string>> LoadExample()
{
Task<List<string>> task = LoadMyExampleTask();
task.ContinueWith(t => default(List<string>), TaskContinuationOptions.OnlyOnFaulted);
return task;
}
Run Code Online (Sandbox Code Playgroud)
我认为这是处理问题的正确方法.但是,我的应用程序抛出一个JsonParseException(称为LoadMyExampleTask).我希望得到null或(甚至更好)一个空列表.
事实上,我想要的只是:
var emptyOrFilledList = await LoadExample(); // guaranteed no exception thrown
Run Code Online (Sandbox Code Playgroud)
根据Luaan的好答案,我用defaultValue选项编写了一个扩展方法:
public static Task<T> DefaultIfFaulted<T>(this Task<T> @this, T defaultValue = default(T))
{
return @this.ContinueWith(t => t.IsCompleted ? t.Result : defaultValue);
}
Run Code Online (Sandbox Code Playgroud)
编辑:await myTask.DefaultifFaulted()刚扔了一个
[ERROR]致命的未处理的异常:System.AggregateException
你确定每个例外都被抓住了吗?
我有一个文件和目录列表List<string> pathes.现在我想计算每个路径彼此共享的最深的公共分支.
我们可以假设它们都有共同的路径,但这在开始时是未知的.
假设我有以下三个条目:
这应该得到结果:C:/ Hello /因为地球正在打破子目录的这个"链".
第二个例子:
- > C:/ Hello/World/This/Is /
你会怎么做?我尝试使用string.split(@"/")并从第一个字符串开始,并检查此数组的每个部分是否包含在其他字符串中.但是,这将是一个非常昂贵的调用,因为我正在迭代(list_of_entries)^ list_of_entries.有没有更好的解决方案?
我目前的尝试将类似于以下(C#+ LINQ):
public string CalculateCommonPath(IEnumerable<string> paths)
{
int minSlash = int.MaxValue;
string minPath = null;
foreach (var path in paths)
{
int splits = path.Split('\\').Count();
if (minSlash > splits)
{
minSlash = splits;
minPath = path;
}
}
if (minPath != null)
{
string[] splits = minPath.Split('\\');
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) 我遵循了Flask-Cache 的教程,并尝试自己实现它.鉴于以下示例,为什么Flask不会缓存时间?
from flask import Flask
import time
app = Flask(__name__)
cache = Cache(config={'CACHE_TYPE': 'simple'})
cache.init_app(app)
@app.route('/time')
@cache.cached(timeout=50, key_prefix='test')
def test():
return time.ctime()
Run Code Online (Sandbox Code Playgroud)
输出始终是当前时间.
看起来每个请求都会重新创建缓存.我究竟做错了什么?
编辑:我用Python 2.7.6执行以下python文件:
def runserver():
port = int(os.environ.get('PORT', 5000))
Triangle(app)
app.run(host='0.0.0.0', port=port, processes=5)
if __name__ == '__main__':
runserver()
Run Code Online (Sandbox Code Playgroud) android ×5
c# ×3
caching ×1
flask ×1
flask-cache ×1
gson ×1
java ×1
messagebox ×1
observable ×1
python ×1
retrofit ×1
spring ×1
spring-boot ×1
string ×1
task ×1
textview ×1
url ×1
weblogic ×1
wpf ×1