我能够在活动及其工作中注入依赖性。但是在片段中调用相同的依赖项不会获得访问权限。
这就是我所做的。
App.Java
public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector {
@Inject
DispatchingAndroidInjector<Activity> activityInjector;
@Inject
DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
super.onCreate();
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public AndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
这是AppComponent.Java
@Singleton
@Component(modules = { AndroidInjectionModule.class, ActivityModule.class, FragmentModule.class})
public interface AppComponent extends AndroidInjector<App> {
void inject(App app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
这是ActivityModule.Java类
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract MainActivity contributeMainActivityInjector();
@ContributesAndroidInjector
abstract MyActivity contributeCampaignActivityInjector();
}
这是FragmentModule.java类
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract MyFragment bindMyFragment();
}
现在在我的MyFragment类中,我想在其中注入该依赖项。首先,我将这些行添加到类中
@Inject
ImageDownloaderApi imageDownloaderApi;
然后检查onCreateView函数,我这样做是为了检查我的依赖项是否像这样
boolean injected = imageDownloaderApi == null ? false : true;
Log.d(this.getClass().getSimpleName(), "Dependency worked: "+ String.valueOf(injected));
而且每次都返回我为假。
同一代码在activites中起作用。 我在活动中要做的另一件事是像这样在onCreate下方添加此行
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this); // this line
super.onCreate(savedInstanceState);
当试图在片段的onCreateView中添加同一行时
AndroidInjection.inject(this);
它在此下方显示红线。如果我用getActivity替换它。它给了我运行时错误。
请看看并指导我错了吗?
我正在处理片段的过程是否正确?因为它显然在活动中起作用。
提前感谢您的宝贵时间。
答案 0 :(得分:2)
我假设您正在使用支持库中的Fragment
-s。尝试将public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector
更改为public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector, HasSupportFragmentInjector
,并随后提供适当的注射器。
This is an easy article使该主题更清晰。另外,此处还介绍了HasSupportFragmentInjector
接口的用法。
答案 1 :(得分:1)
当试图在片段的onCreateView中添加同一行时
AndroidInjection.inject(this);
这应该在片段的function getdetails() {
// define URL
var url = serverURL() + "/eventbyids.php";
// pass userid as JSON objects
itemitemid = decodeURIComponent(getUrlVars()["eventid"]);
var JSONObject = {
"eventid": decodeURIComponent(getUrlVars()["eventid"])
};
// Call Ajax
$.ajax({
url: url,
type: 'GET',
data: JSONObject,
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (arr) {
**// this the part where i having the problem**
$.ajax({
url: serverURL() + "/getorgname.php",
type: 'GET',
data: JSONObject1,
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (arr) {
var orgname = arr[0].orgname;
$('#detailsmain1').append(orgname);
alert("123");
},
error: function () {
alert("error45");
}
});
var eventid = arr[0].eventid;
var orgid = arr[0].userid;
var eventname = arr[0].eventname;
var JSONObject1 = {
"userid": orgid
};
},
error: function () {
alert("error");
}
});
中完成,如果您正在使用支持库中的片段,则应该是onAttach
AndroidSupportInjection.inject(this)