0

Ich habe mehrere SO Antworten zu dieser Frage (here, here,) untersucht und keine der vorgeschlagenen Lösungen haben funktioniert. Mein Problem ist, dass meine RecyclerView-Listenelemente nicht angezeigt werden. Ich habe Haltepunkte in MessengerRecyclerAdapter, onCreateViewHolder, onBindViewHolder und getItemCount festgelegt und nur die erste wird jemals aufgerufen. Während in einem Breakpoint ich die Ausdrucksauswertung eingegeben haben und ausgeführtRecyclerView nicht aufrufen getItemCount

MessengerRecyclerAdapter.getItemCount(); 

und erhielt die erwartete Antwort von 20. Der RecyclerView selbst die beabsichtigte Inhaltsbereich aufgreift, wie unten von dem Screenshot gezeigt (drehte ich den RecyclerView Magenta Markieren Sie den Platz, den es belegt).

RecyclerView location

My RecyclerView XML-Code ist unten:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/thread_list" 
    android:background="@color/colorAccent" 
    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:name="com.jypsee.jypseeconnect.orgPicker.MessengerListFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layoutManager="LinearLayoutManager" 
    tools:context="com.jypsee.jypseeconnect.orgPicker.MessengerListFragment" 
    tools:listitem="@layout/fragment_messenger_cell"/> 

</LinearLayout> 

Meine RecyclerView Handy XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

<TextView 
    android:id="@+id/id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/text_margin" 
    android:textAppearance="?attr/textAppearanceListItem" 
    android:textColor="@color/blueText"/> 

<TextView 
    android:id="@+id/content" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/text_margin" 
    android:textAppearance="?attr/textAppearanceListItem" 
    android:textColor="@color/darkText"/> 
</LinearLayout> 

Meine ListFragment Klasse:

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 

    List<DummyContent.DummyItem> items = new ArrayList<>(); 
    for (Integer i = 0; i<20; i++){ 
     DummyContent.DummyItem item = new DummyContent.DummyItem(i.toString(),"Content","Details"); 
     items.add(item); 
    } 

    View view = inflater.inflate(R.layout.fragment_messenger_list, container, false); 
    mRecyclerView = (RecyclerView) view.findViewById(R.id.thread_list); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    mRecyclerAdapter = new MessengerThreadRecyclerAdapter(items, mListener); 
    mRecyclerView.setAdapter(mRecyclerAdapter); 
    mRecyclerAdapter.notifyDataSetChanged(); 
    return view; 
} 

Meine Adapter Klasse:

public class MessengerRecyclerAdapter 
    extends RecyclerView.Adapter<MessengerRecyclerAdapter.MessageThreadHolder>{ 

private final List<DummyItem> mValues; 
private final RecyclerViewClickListener mListener; 

public MessengerRecyclerAdapter(List<DummyItem> items, RecyclerViewClickListener listener) { 
    mValues = items; 
    mListener = listener; 
} 

@Override 
public MessageThreadHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.fragment_messenger_cell, parent, false); 
    return new MessageThreadHolder(view); 
} 

@Override 
public void onBindViewHolder(final MessageThreadHolder holder, final int position) { 
    holder.mItem = mValues.get(position); 
    holder.mIdView.setText(mValues.get(position).id); 
    holder.mContentView.setText(mValues.get(position).content); 
    holder.mView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mListener != null) { 
       mListener.recyclerViewListClicked(v, position); 
      } 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return mValues.size(); 
} 

public class MessageThreadHolder extends RecyclerView.ViewHolder { 
    public final View mView; 
    public final TextView mIdView; 
    public final TextView mContentView; 
    public DummyItem mItem; 

    public MessageThreadHolder(View view) { 
     super(view); 
     mView = view; 
     mIdView = (TextView) view.findViewById(R.id.id); 
     mContentView = (TextView) view.findViewById(R.id.content); 
    } 
} 

}

Wie man sehen kann ich die Linearlayout Ausrichtung auf vertikale festgelegt haben und die Layout-Manager eingestellt, was waren die zwei häufigsten Lösungen. Ich bin wirklich ratlos, was ich als nächstes versuchen soll, also wird jede Hilfe geschätzt.

+0

Schreiben Sie Ihren Code in onViewCreated() -Methode statt onCreateView(), in onCreateView arbeiten, sollten Sie Geben Sie nur Ihre aufgeblähte Ansicht zurück und der Rest des Codes muss in onViewCreated sein. –

+0

Zeigen Sie Ihre 'fragment_messenger_cell.xml' und versuchen Sie' mRecyclerView.setHasFixedSize (true); ' –

Antwort

1

Wie ich schon sagte in der Antwort bearbeiten. Die Probleme waren in Ihrem XML. Der Hauptgrund, warum es nicht angezeigt wurde, war, weil Sie versucht haben, das Fragment mit Include-Tag anstelle von Fragment-Tag hinzuzufügen. Daher wurde die jeweilige Fragmentklasse nie aufgerufen, wenn das Fragmentlayout zu Ihrer Aktivität hinzugefügt wurde. Im Folgenden finden Sie den Code, den Sie zum korrekten Hinzufügen des Fragments benötigten.

<fragment 
     android:id="@+id/message_thread" 
     android:name="com.jypsee.jypseeconnect.orgPicker.MessengerThreadListFragment" 
     layout="@layout/fragment_messengerthread_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:layout="@layout/fragment_messengerthread_list" /> 

Und Ihre Fragment Layout wie dieses hier

<?xml version="1.0" encoding="utf-8"?> 
<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" 
    android:orientation="vertical" 
    tools:context=".orgPicker.MessengerThreadListFragment"> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/thread_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

sein sollte, ist der Screenshot von enter image description here

+1

@JamesJordanTaylor Wenn möglich, senden Sie mir Ihr Projekt per E-Mail. meine E-Mail-ID lautet [email protected] –

+0

@JamesJordanTaylor Lemme check und melde dich wieder –

+0

@JamesJordanTaylor Ich habe meine Antwort aktualisiert und Ihnen die E-Mail gesendet. bitte prüfe –

Verwandte Themen