2017-03-01 2 views
0

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

} 
} 
+0

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

+0

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

+0

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

Antwort

0

Danke für alle Antworten. Stellt sich heraus, dass ich versucht habe, das Fragment in einen Viewpager einzufügen, den ich auch in der Anwendung verwende. Indem ich ein neues FrameLayout erstellt habe und es eingefügt habe, habe ich mein Problem gelöst.

0

Ihre Probe ist nicht reproduzierbar, da es sich auf Stile etc. bezieht, die nicht gegeben sind, so ist es schwer zu sagen, so allgemein gesprochen ....

Um ein Fragment-Layout zu debuggen, löschen Sie es zunächst von allem außer der übergeordneten ViewGroup. Geben Sie ihm eine leicht erkennbare Farbe, damit Sie sehen können, dass er in Ihrer App angezeigt wird, wenn Sie ihn initiieren.

Wenn es angezeigt wird, ist das Problem Ihr Layout. Wenn nicht, ist es höchstwahrscheinlich Ihr Code.

Sobald Sie dies getan haben, können Sie nach und nach Ihre anderen Ansichten hinzufügen.

beispiels

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:background="@color/Red" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

</LinearLayout 
Verwandte Themen