0

我已經在這個問題上(herehereand here)調查了幾個SO答案,並沒有提出的解決方案已經奏效。我的問題是我的RecyclerView列表項沒有被顯示。我在MessengerRecyclerAdapter,onCreateViewHolder,onBindViewHolder和getItemCount中設置了斷點,並且只有第一個被調用。而在斷點我已經進入了表達式求值和執行RecyclerView沒有要求getItemCount

MessengerRecyclerAdapter.getItemCount(); 

,並得到了20所期望的回答本身RecyclerView佔用這表現在下面的截圖預期的內容區(我把RecyclerView洋紅突出它佔據的空間)。

RecyclerView location

我RecyclerView XML代碼如下:

<?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> 

我RecyclerView細胞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> 

我ListFragment類:

@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; 
} 

我的適配器類:

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

}

正如你可以看到我已經設置的LinearLayout方向垂直,並設置佈局管理器,這是2個最常見的解決方案。我真的不知道下一步該做什麼,所以任何幫助都是值得讚賞的。

+0

編寫代碼在onViewCreated()方法,而不是onCreateView(),在onCreateView的截圖,你應該只返回你的虛擬視圖,其餘代碼必須在onViewCreated中。 –

+0

顯示您的'fragment_messenger_cell.xml'並嘗試'mRecyclerView.setHasFixedSize(true);' –

回答

1

正如我在前面的答案中所說的那樣編輯。問題出在你的xml中。它沒有顯示的主要原因是因爲,您試圖使用include標記而不是片段標記添加片段,因此相應的片段類從未在要添加到活動中的片段佈局上調用。 以下是您正確添加碎片所需的代碼。

<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" /> 

和你的片段佈局應該是這樣的

<?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> 

這裏是工作enter image description here

+1

@JamesJordanTaylor如果可能的話通過電子郵件向我發送您的項目。我的電子郵件地址是[email protected] –

+0

@JamesJordanTaylor查看並回復您 –

+0

@JamesJordanTaylor我已經更新了我的答案並向您發送了電子郵件。請檢查 –