我为具有不同元数据的活动设置了一些别名.
在这个元数据中,我设置了片段的名称,然后我通过反射加载它.
我不知道这是否是一个"干净"的解决方案,虽然通过使用Fragments并将功能放入其中我只有一个SuperActivity和2个空SubActivities来指定清单中的每个.
现在的问题是:我可以通过Intent启动别名吗?new Intent(Context, Class)将无法正常工作,因为我找不到通过intent调用设置元数据的方法.
我需要启动一个Intent <activity android:name="XXX"/>,有一个简单的方法吗?
通用活动及其别名,我需要后者的新意图:
<activity
android:name="ActivityList"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value="ActivityListItem" />
<meta-data
android:name="fragment"
android:value="FragmentLocationList" />
</activity>
<activity-alias
android:name="ActivityListItem"
android:label="@string/locations"
android:parentActivityName="ActivityList"
android:targetActivity="ActivityList" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<meta-data
android:name="android.app.default_searchable"
android:value="ActivityListItem" />
<meta-data
android:name="fragment"
android:value="FragmentItemList" />
</activity-alias>
Run Code Online (Sandbox Code Playgroud) 我有什么选项可以在Android应用程序中创建所有模型类的单个实例?
我在下面添加了一个示例模型类
public class User
{
private String email;
private String name;
public String getEmail() { return this.email; }
public void setEmail(String email) { this.email = email; }
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
}
Run Code Online (Sandbox Code Playgroud)
我希望一旦数据存储在Model Class中,就可以在任何活动,类或片段中检索它.我应该使用单身人士,还是有更好的方法?
dagger2会在这种情况下工作吗?dagger2是创建单身人士的替代方案吗?
谢谢
假设我们有一个@Singleton应用程序模块,它创建并返回一个Hashmap用于存储配置数据的模块.如果配置数据在hashmap中被修改并且android应用程序进入后台并且让我们说onPause()和onStop()被调用.
我正在使用Dagger,我有一个带有@Singleton范围的app组件,还有一个带有@Singleton范围的子组件.现在,当我编译它时,我收到此错误:
[io.droid.nowtellapp.dagger.SignInMvpComponet] io.droid.nowtellapp.dagger.SignInMvpComponet有相互冲突的范围:io.droid.nowtellapp.dagger.ApplicationComponent也有@Singleton
要解决此错误,我@Singleton从子组件中删除并编译它,这次出现此错误:
错误:(12,1)错误:io.droid.nowtellapp.dagger.SignInMvpComponet(unscoped)可能不引用范围绑定:@Singleton @Provides io.droid.nowtellapp.mvp.SignInMvp.Presenter io.droid.nowtellapp.dagger. SignInMvpModule.presenter(io.droid.nowtellapp.webservices.NowTellApi)
也出现此错误:
错误:(21,8)错误:[ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor无法处理此类,因为并非所有依赖项都可以解析.使用生成的代码检查编译错误或循环依赖性.
这是我的ApplicationComponent
@Singleton
@Component(modules = {AppModule.class, RetroApiModule.class})
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
SignInMvpComponet signInMvpComponet(SignInMvpModule signInMvpModule);
}
Run Code Online (Sandbox Code Playgroud)
这是我的SignInMvpComponet
@Subcomponent(modules = {SignInMvpModule.class})
public interface SignInMvpComponet {
void inject(SignInFragment signInFragment);
Run Code Online (Sandbox Code Playgroud)
这是SignInMvpModule类
@Module
public class SignInMvpModule {
private final SignInMvp.View view;
public SignInMvpModule(SignInMvp.View view) {
this.view = view;
}
@Singleton
@Provides
SignInMvp.Presenter presenter(NowTellApi api) {
return new SignInPresenter(view,api);
}
}
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?提前致谢.
我正在尝试使用支持v4片段创建一个简单的匕首2应用程序.修改我的应用程序后,我得到了这个奇怪的编译错误
Error:(35, 8) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
app.series.com.tvshowsapplication.ui.main.MainActivity.fragmentDispatchingAndroidInjector
app.series.com.tvshowsapplication.ui.main.MainActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
Run Code Online (Sandbox Code Playgroud)
快速搜索后,我找到了这个链接.它说我需要使用
事情是我不明白我应该把这部分放在哪里
@Multibinds
abstract Map<Class<? extends android.app.Fragment>, AndroidInjector.Factory<? extends android.app.Fragment>> bindNativeFragments();
Run Code Online (Sandbox Code Playgroud)
我的猜测我需要将它放在BaseActivity中,因为它是一个抽象函数,但我如何在主活动中实现它?
我的主要活动:
public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> implements MainNavigator, HasSupportFragmentInjector {
@Inject
ViewModelProvider.Factory mViewModelFactory;
@Inject
DispatchingAndroidInjector<Fragment> fragmentDispatchingAndroidInjector;
private MainViewModel mMainViewModel;
private DrawerLayout mDrawer;
private Toolbar mToolbar;
private NavigationView mNavigationView;
// …Run Code Online (Sandbox Code Playgroud) 这是一个典型问题,因为对Dagger 2的对象初始化存在很多误解.
如果您的问题被标记为重复,请仔细阅读本文,并确保了解构造函数注入和现场注入之间的区别.
我尝试向Context我的演示者注入一个,但在尝试使用它时我得到一个NullPointerException.
class MyPresenter {
@Inject Context context;
private MyView view;
@Inject
MyPresenter(MyView view) {
this.view = view;
}
}
Run Code Online (Sandbox Code Playgroud)
我的模块看起来像这样
@Module
class MyModule {
@Provides
MyPresenter provideMyPresenter(MyView view) {
return new MyPresenter(view);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里的活动中注入了演示者:
class MyActivity extends Activity {
@Inject MyPresenter presenter;
@Override
public void onCreate(Bundle savedInstanceState) {
createMyActivityComponent().inject(this);
}
}
Run Code Online (Sandbox Code Playgroud) 在运行我的项目时显示此错误,我尝试了所有可用的解决方案,但它不起作用.唯一剩下的就是设置ANDROID_DAILY_OVERRIDE环境变量,但我很难这样做.
我如何ANDROID_DAILY_OVERRIDE在mac上设置环境变量?
我SyncAdapter用于一些服务器客户端同步.在官方的android开发者指南中,提到了触发同步的不同方法.
你只需致电:
ContentResolver.requestSync(ACCOUNT, AUTHORITY, null);
Run Code Online (Sandbox Code Playgroud)
服务器数据更改时(例如,在GCM上).
只需使用一个 ContentObserver
public class TableObserver extends ContentObserver {
@Override
public void onChange(boolean selfChange) {
onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri changeUri) {
ContentResolver.requestSync(ACCOUNT, AUTHORITY, null);
}
}
Run Code Online (Sandbox Code Playgroud)
请执行下列操作:
ContentResolver.setSyncAutomatically(ACCOUNT, AUTHORITY, true)
Run Code Online (Sandbox Code Playgroud)
现在,每当有开放的TCP/IP连接时,SyncAdapter都会触发执行同步.
这对我来说是重要而有趣的部分.为此你只需要这样做(至少这是在开发人员指南中写的):
public static final long SECONDS_PER_MINUTE = 60L;
public static final long SYNC_INTERVAL_IN_MINUTES = 60L;
public static final long SYNC_INTERVAL = SYNC_INTERVAL_IN_MINUTES * SECONDS_PER_MINUTE;
ContentResolver.addPeriodicSync(
ACCOUNT,
AUTHORITY,
Bundle.EMPTY,
SYNC_INTERVAL); …Run Code Online (Sandbox Code Playgroud) 我使用New Android Injector和Dagger 2通过https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe
在MultiDex支持之前,App已经发挥作用.我已经为app/build.gradle和AndroidManifest.xml添加了multidex支持.在MultiDex支持之后,我通过安装在设备上获得了错误logcat
致命异常:主java.lang.RuntimeException:无法启动活动ComponentInfo {com.eusecom.samfantozzi/com.eusecom.samfantozzi.Detail2Activity}:java.lang.RuntimeException:android.support.multidex.MultiDexApplication未实现dagger.android .AasActivityInjector在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)在android.app.ActivityThread.access $ 700(ActivityThread.java:159)在android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1316)位于android.app的android.os.Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:137). ActivityThread.main(ActivityThread.java:5419)位于java.lang.reflect.Method.invokeNative(Native Method),位于com.android.internal.os的java.lang.reflect.Method.invoke(Method.java:525).在dalvik的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)的ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187).system.NativeStart.main(Native Method)引起:java.lang.RuntimeException:android.support.multidex.MultiDexApplication没有在dagger.android.AndroidInjection.inject(AndroidInjection.java:48)中实现dagger.android.HasActivityInjector com.usecom.samfantozzi.Detail2Activity.onCreate(Detail2Activity.java:19)在android.app.Isttrumentation.callActivityOnCreate(Instrumentation.java:1104)的android.app.Activity.performCreate(Activity.java:5372)android.app Android.app.ActivityThread $ H的android.app.ActivityThread.access $ 700(ActivityThread.java:159)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)的.ActivityThread.performLaunchActivity(ActivityThread.java:2257) .handleMessage(ActivityThread.java:1316)在android.app.Handler.dispatchMessage(Handler.java:99)android.app.Looper.loop(Looper.java:137)android.app.ActivityThread.main(ActivityThread. java:5419)在java.lang.reflect.Method.invo的java.lang.reflect.Method.invokeNative(Native Method)ke(Method.java:525)位于dalvik的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) .system.NativeStart.main(Native方法)
我的App.java
public class SamfantozziApp extends MultiDexApplication implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;
public RxBus _rxBus;
@NonNull
private DatabaseReference mDatabaseReference;
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return; …Run Code Online (Sandbox Code Playgroud) 我正在使用Dagger 2为整个应用程序提供单例Realm实例(所有数据访问对象都使用单个域).但是,据我所知,Realm可以使用多实例Realm.getInstance(),我们必须在完成它们时关闭每个实例,如Realm docs所示:
/**
* Closes the Realm instance and all its resources.
* <p>
* It's important to always remember to close Realm instances when you're done with it in order not to leak memory,
* file descriptors or grow the size of Realm file out of measure.
*
* @throws IllegalStateException if attempting to close from another thread.
*/
@Override
public void close() {
if (this.threadId != Thread.currentThread().getId()) {
throw new IllegalStateException(INCORRECT_THREAD_CLOSE_MESSAGE);
}
if …Run Code Online (Sandbox Code Playgroud) 我为我的应用程序做了一个设计,但它运行得非常慢。我想要达到的结果是这样的:
到目前为止,我已经能够用这个 xml 实现这个结果:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.asteam.unify.Mbajtje">
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:layout_marginRight="@dimen/general_margin"
android:layout_marginLeft="@dimen/general_margin">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lendaText"
android:layout_marginTop="@dimen/general_margin"
android:text="Lënda:"/>
<Spinner
android:id="@+id/lendaMbajtje"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lendaText"
android:textSize="@dimen/font_size"
android:background="@drawable/border_bottom"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/subjektiText"
android:layout_marginTop="@dimen/general_margin"
android:layout_below="@id/lendaMbajtje"
android:text="Subjekti:"/>
<Spinner
android:id="@+id/subjektiMbajtje"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/subjektiText"
android:textSize="@dimen/font_size"
android:background="@drawable/border_bottom"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/subjektiMbajtje"
android:id="@+id/detajetMbajtjesText"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginRight="@dimen/general_margin"
android:layout_weight="3">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_weight="1"
android:text="Data e mbajtjes:"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="1"
android:id="@+id/dates"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:orientation="horizontal">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/dayMbajtje"
android:background="@drawable/border_bottom" …Run Code Online (Sandbox Code Playgroud) 我认为fill_parent有很大的价值,我想自己实现它,所以我可以做的不仅仅是填充剩余的空间(例如:填充80%的剩余空间等)
fill_parent实际上如何在引擎盖下工作?如何计算剩余空间,它如何在运行时工作等.
我在过去做过类似的事情,fill_parent根据当前的屏幕大小,元素应该占用的屏幕大小等来计算元素应该占用的空间等等.但我想知道Android是如何做到的与fill_parent.
是一个Service独立的Activity生命周期吗?即使活动被终止,它还会继续运行吗?