小编Kav*_*avi的帖子

使用Dagger-android将活动暴露/提供/注入图表

以前使用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)

android dagger dagger-2

5
推荐指数
0
解决办法
202
查看次数

DialogFragment中的可点击超链接

这是我在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

2
推荐指数
1
解决办法
2078
查看次数