我的应用程序在其Activity中有一个Fragment.我想以编程方式从当前片段本身替换另一个片段.
例如,如果我单击片段内的按钮,则片段应替换为另一个片段,但活动应保持不变.
可能吗?如果是这样,怎么办?
CardView通常用于装饰一个元素.但有时你需要将几个项目包装到这个小部件中.例如,在收件箱应用程序中.
那么最好的方法是什么?它可以通过自定义LayoutManager甚至自定义ItemDecoration来实现.自定义LayoutManager的实现不是一件容易的事(完全支持动画,项目装饰等).在第二个选项中,必须手动实现边界的绘制,忽略CardView(和Android-L提升)实现.
在我的项目中,我使用预定义的注释@With
:
@With(Secure.class)
public class Test { //....
Run Code Online (Sandbox Code Playgroud)
源代码@With
:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface With {
Class<?>[] value() default {};
}
Run Code Online (Sandbox Code Playgroud)
我想编写自定义注释@Secure
,其效果与之相同@With(Secure.class)
.怎么做?
如果我这样喜欢怎么办?它会起作用吗?
@With(Secure.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Secure {
}
Run Code Online (Sandbox Code Playgroud) 我正在开发Android的音乐应用程序.我需要两件事:
首先我正在使用iTunes API - 但这对真正的Android开发者来说并不是爱国的.如果Google Play音乐有类似的服务,我宁愿使用它.它存在吗?
第二个怎么样?我可以使用此代码根据我的查询显示所有搜索结果:
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse("market://search?q=<My Query>"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但我想准确地显示专辑或跟踪购买页面.Google Play可以使用吗?
在Google IO 2013中,Google宣布推出支持库的新版本,其中包括ViewDragHelper
课程.我看到了文档,但是我找不到这个类的任何使用示例.
例如,一个非常典型的情况:我有一个自定义视图,它从内部延伸FrameLayout
并允许拖动其中的一些View
内容.例如,让它成为一个Button
.我覆盖onTouchEvent()
并onInterceptTouchEvent()
在我的自定义视图中,如果rect的按钮包含触摸坐标,这不是一个简单的点击,那么我开始拖动.
那么,我必须做些什么ViewDragHelper
呢?Button
应点击应该正确处理.
我有一个带有选项菜单的简单应用程序,它在片段的开头变化.问题是,在开始时除了第一个onCreateOptionsMenu()之外的任何片段都会被调用两次 - 在onCreate()和onResume()之后.在onCreate()中我通过setHasOptionsMenu(true)手动调用它,但是在onResume()之后它不应该发生.此外,这仅在第一个片段开始后发生.
这是基本片段代码:
class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle clicks
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Create a menu
super.onCreateOptionsMenu(menu, inflater);
}
}
Run Code Online (Sandbox Code Playgroud)
并在Activity中更改片段代码:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
Run Code Online (Sandbox Code Playgroud)
该示例不使用任何外部库,如ActionBarSherlock,只使用SupportLibrary.我想,问题出在FragmentTransaction的replace()方法中,因为它在第一个片段启动时工作正常.但我不知道,从哪里开始解决问题.我需要在View中完全替换片段.
来自Google Developers Portal的信息:
- 打开应用程序目录中的build.gradle文件.
- 在依赖项下为最新版本的play-services添加新的构建规则.例如:
apply plugin: 'android'
...
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile 'com.google.android.gms:play-services:4.0.30'
}
Run Code Online (Sandbox Code Playgroud)
但这是标准Google Play服务的说明.Froyo的Google Play服务是一个不同的模块.我从未与Gradle合作 - 我需要做些什么来为Froyo添加Google Play服务?
在谷歌I/O 2013上,谷歌宣布了ActionBarCompat库.知道是否发布日期?或者可能已经发布了?
我通过NotificationManager发布文件上传进度,但在更新其进度时,用户界面冻结.
我使用NotificationCompat.Builder,它在类字段中缓存.因此,进度发布非常简单:
manager.notify(id, uploader.
setProgress(MAX_PROGRESS, (int) (progress * 100), false).
build()
);
Run Code Online (Sandbox Code Playgroud)
保证更新进度从主线程执行(包装在Handler装饰器中).
this.request.setCallback(new UploaderDecorator(this.request.getCallback()));
Run Code Online (Sandbox Code Playgroud)
进展情况如下:
long total = file.length();
long uploaded = 0;
int bytesRead = input.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
output.write(buffer, 0, bufferSize);
uploaded += bytesRead;
callback.onUploadProgress(activeFile, ((float) uploaded / total));
bytesRead = input.read(buffer, 0, bufferSize);
}
Run Code Online (Sandbox Code Playgroud)
那为什么它的工作如此之慢?
我需要在我的应用程序中实现导入Facebook联系人.所有,我需要的 - 得到Facebook好友列表.
我可以使用适用于Android的官方SDK,但对于像这样的简单任务来说,它太大而且太重.我可以手动构建和发送请求,这很容易.我也可以access_token
在WebView中使用oAuth Facebook授权.
但我想为用户添加一些便利.Facebook Android SDK支持通过Facebook Android App获取令牌.我想,这种机制在两个进程之间使用Intent
和onActivityResult
传输数据.因此,在这种情况下,我可以构建相同的Intent
并将其发送到Facebook处理access_token
.
当然,他们可以使用任何其他机制在进程之间传输数据,但它仍然必须是一种模拟Facebook Android SDK的令牌请求的方法.那么如何模拟呢?