У меня есть один фрагмент, если ориентация портретная, и два фрагмента, если ориентация альбомная.
вначале все работает хорошо, в портрете нормально, в ландшафте нормально, но я возвращаюсь в портрет, и это не удалось.
Проблема здесь: когда у меня есть ссылка на FragmentDetails (он должен быть нулевым), должен быть нулевым, потому что это удаление в портретном режиме, но это не нулевое.
getSupportFragmentManager().findFragmentById(R.id.fragmentMainActivityDetailsMail);
Вот FragmentDetails
public class DetailsMailFragment extends android.support.v4.app.Fragment {
private TextView textViewDetailsStaticSubject;
private TextView textViewDetailsSubject;
private TextView textViewDetailsStaticFrom;
private TextView textViewDetailsFrom;
private TextView textViewDetailsMailBody;
public DetailsMailFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_details_mail, container, false);
textViewDetailsStaticSubject=(TextView)view.findViewById(R.id.textViewDetailsStaticSubject);
textViewDetailsSubject=(TextView)view.findViewById(R.id.textViewDetailsSubject);
textViewDetailsStaticFrom=(TextView)view.findViewById(R.id.textViewDetailsStaticFrom);
textViewDetailsFrom=(TextView)view.findViewById(R.id.textViewDetailsFrom);
textViewDetailsMailBody=(TextView)view.findViewById(R.id.textViewDetailsMailBody);
return view;
}
public void bindMailData(String subject,String senderName,String message) {
textViewDetailsStaticSubject.setText("Subject:");
textViewDetailsSubject.setText(subject);
textViewDetailsStaticFrom.setText("From:");
textViewDetailsFrom.setText(senderName);
textViewDetailsMailBody.setText(message);
}
}
Вот основное занятие
public class MainActivity extends FragmentActivity implements MailFragment.MailClickListener {
private boolean isMultiPanel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onMailClickListener(Mail email) {
setMultiPanel();
if(isMultiPanel){
DetailsMailFragment details=(DetailsMailFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentMainActivityDetailsMail);
details.bindMailData(email.getSubject(),email.getSenderName(),email.getMessage());
}else{
Intent intent=new Intent(MainActivity.this,DetailsActivity.class);
intent.putExtra("subject",email.getSubject());
intent.putExtra("senderName",email.getSenderName());
intent.putExtra("message",email.getMessage());
startActivity(intent);
}
}
public void setMultiPanel(){
DetailsMailFragment details=(DetailsMailFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentMainActivityDetailsMail);
isMultiPanel=details!=null;
}
}
Вот основной макет активности в портретном режиме
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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=".Activities.MainActivity">
<fragment
android:id="@+id/fragmentMainActivityMail"
android:name="com.jfarias.mymaillab09.Fragments.MailFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_mail">
</fragment>
</android.support.constraint.ConstraintLayout>
Вот макет основной деятельности в ландшафтном режиме
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activities.MainActivity">
<fragment
android:id="@+id/fragmentMainActivityMail"
android:layout_height="match_parent"
android:layout_width="0dp"
android:name="com.jfarias.mymaillab09.Fragments.MailFragment"
tools:layout="@layout/fragment_mail"
android:layout_weight="0.4"
/>
<fragment
android:id="@+id/fragmentMainActivityDetailsMail"
android:layout_height="match_parent"
android:layout_width="0dp"
android:name="com.jfarias.mymaillab09.Fragments.DetailsMailFragment"
tools:layout="@layout/fragment_details_mail"
android:layout_weight="0.6"
>
</fragment>
</LinearLayout>
Журнал ошибок
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jfarias.mymaillab09, PID: 15223
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.jfarias.mymaillab09.Fragments.DetailsMailFragment.bindMailData(DetailsMailFragment.java:42)
at com.jfarias.mymaillab09.Activities.MainActivity.onMailClickListener(MainActivity.java:35)
at com.jfarias.mymaillab09.Fragments.MailFragment$1.onItemClick(MailFragment.java:58)
at android.widget.AdapterView.performItemClick(AdapterView.java:350)
at android.widget.AbsListView.performItemClick(AbsListView.java:1683)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:4094)
at android.widget.AbsListView$10.run(AbsListView.java:6583)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
спасибо за вашу поддержку.