2017-01-01 50 views
0

我从调用片段类的活动时遇到问题。更多:来自片段的调用活动

XML适配器的布局:从主要活动

<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" /> 

代码调用片段:

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); 

} 

错误:

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

从片段类代码

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.应用打开默认的活动 2.用户调用一个新的活动以传递意图数据 3.新的活动呼吁片段

第1(主)活动:

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); 

好了,你应该知道所有片段都由带有制表符布局的viewpager调用。

@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; 
     } 
    } 
+0

您将添加的意图这使tringExtra –

+0

@DasserBasyouni是的,我已经添加了 – HEISENBERG

回答

0

只能用getActivity()访问onAttach()调用之间的活动阅读以下文章和onDetach()

Fragment_Questions本身似乎只是为了开始一个新的活动,所以您可以将所有逻辑移动到活动的点击侦听器,并且根本不使用片段。

如果还有更多关于这个片段的信息,而且你实际上打算将它添加到活动的某个时间,那么将这个逻辑与片段分开似乎更好。你只能在那里使用getActivity()和神奇的context。您可以将其设置为静态,并将该活动作为参数进行替代。

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); 
} 
+0

如果您请添加一些代码如何意识到这一点,我试过了,但没有成功。 – HEISENBERG

+0

我做到了!感谢您的帮助 – HEISENBERG

0

您是否扩展了Fragment或FragmetnActivity?

如果扩展FragmetnActivity(我认为),那么不使用getActivity()

而且添加代码为启动您的当前活动

Fragment_Questions frau = new Fragment_Questions(); 
 
    frau.openProfile(v);

你刚才的意图创建了新的片段,但没有将其附加到活动中? 使用FragmentManager。

,如果你想使用片段内ViewPager使用THIS引导

+0

我只是使用片段 – HEISENBERG

+0

上传您开始当前活动的代码 –

+0

我已更新问题 – HEISENBERG

0

你应该Fragment_Questions添加到活动。

例如,在活动布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <fragment 
     android:id="@+id/fragment_question" 
     android:name="com.example.view.Fragment_Questions" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

在Acitivity.java:

questionFragment = (Fragment_Questions) findViewById(fragment_question); 

,然后,你可以通过用户onclick事件是这样的:

questionFragment.openProfile(v); 
+0

我使用viewpager与选项卡布局调用片段 – HEISENBERG

+0

函数调用成功,问题出在调用活动的方法 – HEISENBERG

+0

你有没有在Activity中初始化ViewPager?你应该给更多的细节代码。 –

0

你是获取空指针异常,因为您的片段未附加到活动。您只是实例化片段,然后调用openProfile(View v)方法,这是处理事件的错误方法。如果您已连接片段,然后用得到framgent实例

questionFragment = (Fragment_Questions) findViewById(fragment_question); 

您可以在如何从片段沟通活动 https://developer.android.com/training/basics/fragments/communicating.html

+0

我使用viewpager与选项卡布局调用片段 – HEISENBERG

+0

函数调用成功,问题是在调用活动的方法 – HEISENBERG

0

正如我通情达理的用户的步骤的抗干扰你必须在启动它的意图片段取代getIntent()这是intent_settings我认为

而且使这一意图static,以分享它

并作出是否statment为了不具有空例外

if(theIntent.hasPutextra) 
{getExtra.....}