Ich versuche ein Fragment in einem Container durch ein anderes zu ersetzen. Ich habe einen Toast in dem neuen Fragment erstellt, das angezeigt wird, aber das Layout wird nicht angezeigt.Layout erscheint nicht beim Ersetzen eines Fragments
Hier ist, wo ich das Fragment ersetzen:
Bundle bundle = new Bundle();
bundle.putString("title", textContentList.get(position).getTitle());
bundle.putString("crated", textContentList.get(position).getCreated());
bundle.putString("author", textContentList.get(position).getAuthor());
bundle.putString("fullContent", textContentList.get(position).getFullContent());
MessageDetailsFragment messageDetailsFragment = new MessageDetailsFragment();
messageDetailsFragment.setArguments(bundle);
replaceFragment(messageDetailsFragment);
public void replaceFragment(Fragment fragment){
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.commit();
}
Hier ist mein Fragment Layout:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text_container"
android:orientation="vertical"
android:layout_marginTop="70dp"
android:background="?android:colorBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/headings"
android:text="Author"
android:layout_marginTop="10dp"
android:id="@+id/message_details_author"/>
<TextView
style="@style/subTxt_messageDetails"
android:text="Receiver"
android:id="@+id/message_details_receiver"/>
<View
android:layout_width="320dp"
android:layout_gravity="center"
android:layout_height="1dp"
style="@style/dividerLine" />
<TextView
style="@style/headings"
android:layout_marginTop="10dp"
android:text="Title"
android:id="@+id/message_details_title"/>
<TextView
style="@style/subTxt_messageDetails"
android:text="Date"
android:id="@+id/message_details_date"/>
<View
android:layout_width="320dp"
android:layout_gravity="center"
android:layout_height="1dp"
style="@style/dividerLine" />
<TextView
android:text="Full content"
style="@style/subTxt_messageDetails"
android:layout_marginTop="15dp"
android:id="@+id/message_details_full_content"/>
<TextView
style="@style/subTxt_messageDetails"
android:text="Sent by SMS"
android:textSize="15sp"
android:layout_marginTop="15dp"
android:id="@+id/message_sent_by"/>
</LinearLayout>
und hier ist mein neues Fragment:
public class MessageDetailsFragment extends Fragment {
private String title, created, author, fullContent;
private TextView textViewTitle, textViewDate, textViewAuthor, textViewFullContent;
private Bundle bundle;
private Context context;
public MessageDetailsFragment(){
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bundle = this.getArguments();
title = bundle.getString("title");
created = bundle.getString("created");
author = bundle.getString("author");
fullContent = bundle.getString("fullContent");
context = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_message_details, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
Toast.makeText(context, "ADDASD", Toast.LENGTH_SHORT).show();
textViewTitle = (TextView) getView().findViewById(R.id.message_details_title);
textViewTitle.setText(title);
textViewDate = (TextView) getView().findViewById(R.id.message_details_date);
textViewDate.setText(created);
textViewAuthor = (TextView) getView().findViewById(R.id.message_details_author);
textViewAuthor.setText(author);
textViewFullContent = (TextView) getView().findViewById(R.id.message_details_full_content);
textViewFullContent.setText(fullContent);
}
}
Ihr Layout ist unvollständig. Es hat kein schließendes Tag und Verweise auf Ansichten, die es nicht enthält. Beispiel: imageView Korrigieren Sie Ihr Layout und versuchen Sie es erneut, wenn Sie noch ein Problem haben. – Kuffs
Vielen Dank. Ich entfernte die Ansicht, die nicht dort sein sollte, und das schließende Tag wurde hier aus irgendeinem Grund nicht angezeigt. Ich habe immer noch das gleiche Problem hart – Andypandy
Auch nicht verwandt, aber in Ihrem 'OnCreate', weisen Sie' getActivity' auf die Kontextvariable. Dies ist immer Null, da die Aktivität erst später im Lebenszyklus festgelegt wird. Es ist nicht notwendig, Verweise auf den Kontext beizubehalten. Sie können getActivity später aufrufen, wenn Sie sie benötigen, und eine Überprüfung auf Null durchführen, bevor Sie sie verwenden. Ihre Aktivität könnte beendet werden, aber die Referenz wäre immer noch für die fertige Aktivität vorhanden und das Fragment könnte also einen Absturz verursachen, wenn es verwendet wird. – Kuffs