2015-08-08 65 views
-1

所以我试图将一个片段中的文本传递给主Activity,并将主Activity传递给另一个片段,以便显示它。为什么我会在Android Studio(碎片)中获取NullPointerException?

这里是片段的代码,将其发送给主要活动:

public class TopFragment extends Fragment{ 

private static EditText topInput; 
private static EditText bottomInput; 

FragmentInterface communicate; 

public interface FragmentInterface{ 
    public void sendTheInput(String topText,String bottomText); 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.top_fragment,container,false); 

    topInput = (EditText) view.findViewById(R.id.topInput); 
    bottomInput = (EditText) view.findViewById(R.id.bottomInput); 
    final Button submitButton = (Button)view.findViewById(R.id.submitButton); 

    submitButton.setOnClickListener(
      new View.OnClickListener() { 
       public void onClick(View v) { 
        buttonClicked(v); 
       } 
      } 
    ); 
    return view; 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try{ 
     communicate = (FragmentInterface) activity; 
    } catch (ClassCastException e){ 
     throw new ClassCastException(activity.toString()); 
    } 
} 

public void buttonClicked(View view){ 

    communicate.sendTheInput(topInput.getText().toString(),bottomInput.getText().toString()); 

} 

} 

这里是主要的活动代码:

@Override 
    public void sendTheInput(String topText, String bottomText) { 
     BottomFragment bottomFrag = (BottomFragment)getSupportFragmentManager().findFragmentById(R.id.bottomFragment); 
     bottomFrag.setBoxText(topText,bottomText); 
    } 

这里是底部片段代码:

public class BottomFragment extends Fragment{ 

private static EditText topTextBox; 
private static EditText bottomTextBox; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.bottom_fragment,container,false); 



    return view; 
} 

public void setBoxText(String topText, String bottomText){ 

    topTextBox.setText(topText); 
    bottomTextBox.setText(bottomText); 

} 
} 

当我运行应用程序,我没有得到任何运行时错误,但我确实得到这个:

08-08 13:09:45.820 2241-2241/com.example.vanessaanthony.fragmentreview E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.vanessaanthony.fragmentreview, PID: 2241 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference 
      at com.example.vanessaanthony.fragmentreview.BottomFragment.setBoxText(BottomFragment.java:29) 
      at com.example.vanessaanthony.fragmentreview.MainActivity.sendTheInput(MainActivity.java:20) 
      at com.example.vanessaanthony.fragmentreview.TopFragment.buttonClicked(TopFragment.java:55) 
      at com.example.vanessaanthony.fragmentreview.TopFragment$1.onClick(TopFragment.java:36) 
      at android.view.View.performClick(View.java:4780) 
      at android.view.View$PerformClick.run(View.java:19866) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5257) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 08-08 13:09:56.646 2241-2248/com.example.vanessaanthony.fragmentreview W/art﹕ Suspending all threads took: 5.142ms 

我是Android Studio的初学者,我不知道为什么我的程序无法工作。任何答案非常感谢。

回答

1

您在BottomFragment声明两个EditText S(实际上,你应该删除static那里,每个片段都有自己的编辑文本,但是这不是问题):

private static EditText topTextBox; 
private static EditText bottomTextBox; 

,但你不不给他们一个价值。 Android本身并不知道你的意思是哪个EditText;你必须找到他们使用findViewById。这通常是在onCreateView完成(用于碎片):

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.bottom_fragment,container,false); 
    topTextBox = (EditText)view.FindViewById(R.id.topTextBox); 
    bottomTextBox = ... 

就像你在TopFragment一样。

+0

谢谢!不知道我错过了这个。 –

相关问题