我使用dagger 2将FragmentManager和FragmentTransaction注入我的Activity。 在我添加
之前,一切看起来都很好$('#addUserSubmit').click(function () {
var tagId = $(this).closest('form').find('input[name="userTag"]').val();
var adminUser = $(this).closest('form').find('input[name="userName"]').val();
AddUser(tagId, adminUser);
});
function AddUser(tagId, adminUser) {
var data = JSON.stringify({
'tagId': tagId,
'adminUser': adminUser
});
$.ajax({ //HERE IS WHERE THE ERROR OCCURS (After it goes through to set all of the variables below).
type: "POST",
url: "/UsersAccounts/AddUser",
data: data,
success: function (outVal) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest + textStatus + errorThrown);
},
contentType: 'application/json'
}); //IF I ADD A BREAKPOINT HERE IT WILL WORK IN GOING TO THE MVC
//FUNCTION TO BELOW AND IT WILL WORK AS INTENDED (BUT IF I RUN
//THE CODE NORMALLY OR WITHOUT A BREAKPOINT HERE IT WILL ALERT
//WITH THE ERROR ABOVE).
}
[HttpPost]
public String AddUser(int tagId, string adminUser){
if (tagId > 0){
try{
using (TubeBPC db = new TubeBPC()){
Users user = new Users() {TAGID=tagId, AdminUser=adminUser };
db.Users.Add(user);
db.SaveChanges();
return "success";
}
}
catch(Exception dbe){
throw dbe;
}
}
else{
throw new ArgumentOutOfRangeException("TagID is not a positive number");
}
}
进入我的活动,它会在重建时抛出错误,如下所示:
错误:(21,10)错误:如果没有@ Provide-或@ Produces-annotated方法,则无法提供android.support.v4.app.FragmentManager。 注入android.support.v4.app.FragmentManager com.toranj.tyke.ui.MainActivity.fragmentManager com.toranj.tyke.ui.MainActivity注入 com.toranj.tyke.dagger.components.LotteryComponent.inject(活性)
以下是模块:
@Inject
FragmentManager fragmentManager;
@Inject
FragmentTransaction fragmentTransaction
以下是组件:
@Module
public class FragmentModule {
FragmentActivity activity;
public FragmentModule(FragmentActivity activity) {
this.activity = activity;
}
@Provides
@PerActivity
public FragmentManager providesFragmentManager() {
return activity.getSupportFragmentManager();
}
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction() {
return activity.getSupportFragmentManager().beginTransaction();
}
}
这是我的活动:
@PerActivity
@Component(modules = FragmentModule.class)
public interface FragmentComponent {
void inject(Activity activity);
FragmentManager fragmentManager();
FragmentTransaction fragmentTransaction();
}
我很擅长使用匕首和依赖注入,我可能在某处错过了一点。任何有解释的答案都会帮助我理解注射,也非常感谢。
编辑:模块,组件和活动中使用的所有fragmentManage都来自 android.support.v4.app.FragmentManager 。
答案 0 :(得分:1)
我想在names
中使用了t = '\n'.join(str(n) for n in names)
。
android.app.FragmentManager
。
答案 1 :(得分:0)
从我在错误中看到的内容,您似乎正在使用其他组件来注入活动:LotteryComponent.java
另外,请尝试更改此方法
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction() {
return activity.getSupportFragmentManager().beginTransaction();
}
到
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction(FragmentManager fm) {
return fm.beginTransaction();
}
我怀疑这会解决问题,但值得一试,至少你会从同一来源一致地检索对象。
答案 2 :(得分:0)
您应该注入您真正想要使用的类。
public interface FragmentComponent {
void inject(Activity activity);
}
这将注入Activity
,它是Android Framework的一部分,没有任何@Inject
注释字段。这种注入方法基本上是无操作。
Dagger在编译时生成依赖图。它不知道您突然尝试注入MainActivity
并期望FragmentManager
出现。
提供
public interface FragmentComponent {
void inject(MainActivity activity);
}
它应该有用。