以前使用Dagger 2.10时,我使用了一个非常典型的设置,ActivitySubcomponent其中有一个ActivityModule,该Activity实例将实例提供给图形/将其暴露给图,以注入到需要它的其他类中。
用ActivityModule这样的:
@Module
public class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
/**
* Expose the activity to the graph.
*/
@Provides @ActivityScope
Activity activity() {
return activity;
}
}
Run Code Online (Sandbox Code Playgroud)
可以Activity通过ActivityModule在注入之前创建一个新的实例来获取实例:
@Inject PermissionsHelper permissionsHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(getApplicationContext()))
.plus(new ActivityModule(this))
.inject(this);
}
Run Code Online (Sandbox Code Playgroud)
我可以提供Activity以下内容:
@ActivityScope
public class PermissionsHelper {
private final Activity activity; …Run Code Online (Sandbox Code Playgroud) 这是我在MainActivity类中创建AlertDialog的静态内部类:
public static class AboutDialogFragment extends DialogFragment {
public static AboutDialogFragment newInstance() {
AboutDialogFragment frag = new AboutDialogFragment();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_dialog_about)
.setTitle(R.string.about)
.setMessage(R.string.about_message)
..........
.create();
}
}
Run Code Online (Sandbox Code Playgroud)
当我按下MainActivity中的菜单项时,我正在显示它:
case R.id.about:
DialogFragment aboutFragment = AboutDialogFragment.newInstance();
aboutFragment.show(getSupportFragmentManager(), "about_dialog");
// Make links clickable
((TextView) aboutFragment.getDialog().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
return true;
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用注释行使消息文本中的链接可单击.
我在这里找到了这个方法,在使用常规Dialog(没有片段)时它对我有用.
但是,这是我第一次尝试在DialogFragment上使用它,并且在尝试查找视图时总是遇到NullPointerException.
我也尝试了,aboutFragment.getView().findViewById(android.R.id.message)但也返回null.
也许我太早/在错误的地方调用代码?
任何想法都会很棒!
编辑:只是尝试((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
,并
((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());在onCreateView(),并没有成功也试过在onCreateDialog().
仍然得到空指针异常...
android android-fragments android-alertdialog android-dialogfragment