[android]调用 Activity 从Fragment

发布时间: 2017/3/19 17:05:06
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个问题与电话 activityfragment 类。更多︰

XML适配器的 layout :

<TextView
     style="@style/LiHeadLogin"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:foreground="?android:attr/selectableItemBackground"
     android:clickable="true"
     android:onClick="openProfile"
     android:id="@+id/genFrom" />

从主要的代码 activity ,调用 fragment :

public void openProfile(View v) {
     Fragment_Questions frau = new Fragment_Questions();
     frau.openProfile(v);
}

代码从 fragment 类︰

public void openProfile(View v) {

    View row = (View) v.getParent();

    TextView child2 = (TextView) row.findViewById(R.id.genFromlogin);
    String child3 = child2.getText().toString();

    Intent ini = getActivity().getIntent();
    String c_username = ini.getStringExtra(MainActivity.KEY_USERNAME);
    String c_password = ini.getStringExtra(MainActivity.KEY_PASSWORD);
    Intent ini2 = new Intent(context, User.class);
    ini2.putExtra(MainActivity.KEY_USERNAME, c_username);
    ini2.putExtra(MainActivity.KEY_PASSWORD, c_password);
    ini2.putExtra(MainActivity.KEY_USER, child3);
    getActivity().startActivity(ini2);

}

错误︰

java.lang.IllegalStateException: Could not execute method for android:onClick
...
...
...
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.support.v4.app.FragmentActivity.getIntent()' on a null object reference

P.S.1。应用程序将打开默认 activity 2。用户调用一个新 activity 通过 intent 数据 3。新 activity 电话fragment

第一个 (主) activity :

Intent intent_settings = getIntent();
            String c_username = intent_settings.getStringExtra(MainActivity.KEY_USERNAME);
            String c_password = intent_settings.getStringExtra(MainActivity.KEY_PASSWORD);
            Intent intent_settings_1 = new Intent(this, NewFeed.class);
            intent_settings_1.putExtra(MainActivity.KEY_USERNAME, c_username);
            intent_settings_1.putExtra(MainActivity.KEY_PASSWORD, c_password);
            intent_settings_1.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivity(intent_settings_1);

好吧,你应该知道所有的fragments都由 viewpager 与选项卡 layout

@Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                Fragment_Home tab1 = new Fragment_Home();
                return tab1;
            case 1:
                Fragment_Questions tab2 = new Fragment_Questions();
                return tab2;
            default:
                return null;
        }
    }

解决方法 1:

你只可以访问 activitygetActivity() 之间调用 onAttach()onDetach()

Fragment_Questions本身只是看起来以服务为宗旨,以启动一个新 activity ,所以你可以搬所有的逻辑去点击listener的 activity 和不使用 fragment 在所有。

如果还有更多关于 fragment 和你实际上打算将它添加到 activity 什么时候将来它仍似乎更好,有这种逻辑分开 fragment 。你只能使用 getActivity() 和神奇 context 在那里。你只是做静态和 activity 作为参数相反。

public static void openProfile(Activity activity, View v) {
    View row = (View) v.getParent();

    TextView child2 = (TextView) row.findViewById(R.id.genFromlogin);
    String child3 = child2.getText().toString();

    Intent ini = activity.getIntent();
    String c_username = ini.getStringExtra(MainActivity.KEY_USERNAME);
    String c_password = ini.getStringExtra(MainActivity.KEY_PASSWORD);
    Intent ini2 = new Intent(activity, User.class);
    ini2.putExtra(MainActivity.KEY_USERNAME, c_username);
    ini2.putExtra(MainActivity.KEY_PASSWORD, c_password);
    ini2.putExtra(MainActivity.KEY_USER, child3);
    activity.startActivity(ini2);
}
赞助商