2017-06-16 33 views
0

我在擴展片段的類內部使用recyclerview。但沒有顯示。我在類裏面調用了StringRequest onResponse函數裏的recyclerview。以下是我的代碼。任何人都可以幫助我解決這個問題。無法顯示片段類中的recyclerview內容

ChatMessageGroups的構造函數被調用,但onCreateViewHolder()& onBindViewHolder()不是。所述getItemCount()也返回多於0

ChatGroups.java

public class ChatGroups extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.activity_chat_groups, container, false); 

     final RequestQueue queue = Volley.newRequestQueue(view.getContext()); 
     StringRequest strReq = new StringRequest(Request.Method.POST, URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try 
         { 
          JSONObject jsonResponse = new JSONObject(response); 

          RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_chat_groups); 
          ChatMessageGroups mAdapter = new ChatMessageGroups(jsonResponse.getString("groups")); 

          RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false); 
          recyclerView.setLayoutManager(mLayoutManager); 
          recyclerView.setAdapter(mAdapter); 
         } 
         catch (Exception e) 
         { 
          e.printStackTrace(); 
         } 
        } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 

      @Override 
      protected HashMap<String, String> getParams() { 
       HashMap<String, String> details = new HashMap<String, String>(); 
       details.put("key", session.getKey()); 
       return details; 
      } 
     }; 
     queue.add(strReq); 

     return inflater.inflate(R.layout.activity_chat_groups, container, false); 
    } 
} 

ChatMessageGroups.java

public class ChatMessageGroups extends RecyclerView.Adapter<ChatMessageGroups.MyViewHolder> { 

    private final JSONArray messages; 

    class MyViewHolder extends RecyclerView.ViewHolder { 
     TextView group_name; 

     MyViewHolder(View view) { 
      super(view); 
     group_name = (TextView) view.findViewById(R.id.group_name); 

     } 
    } 

    ChatMessageGroups(JSONArray messages) { 
     this.messages = messages; 

    } 

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

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) 
    { 
     try 
     { 
      HashMap<String, String> maps = (HashMap<String, String>) messages.get(position); 
      for(HashMap.Entry<String, String> v: maps.entrySet()) 
      { 
       String key = String.valueOf(v.getKey()); 
       String value = String.valueOf(v.getValue()); 

holder.group_name.setText(value); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return messages.length(); 
    } 
} 

activity_chat_groups_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:id="@+id/group_name" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal" 
     android:layout_margin="5dp" 
     android:textColor="@color/black" 
     android:visibility="gone"/> 
</LinearLayout> 

activity_chat_groups.xml

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view_chat_groups" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="55dp" 
     android:scrollbars="vertical"/> 
</LinearLayout> 

回答

0

明白了...

更改回inflater.inflate(R.layout。activity_chat_groups,container,false);返回視圖;

它開始工作。

0

無法在片段類

顯示recyclerview內容在你onBindViewHolder,沒有設置可以顯示。這就是爲什麼你什麼都看不到。

+0

如果我嘗試在onBindViewHolder中打印任何內容,則不會打印任何內容。 –

+0

嘗試調用adapter.notifyDatasetChanged(),將適配器設置爲recyclerview後 – Darish

+0

嘗試使用此..但仍不能正常工作.. –

0

在你的第一個代碼,還有一個:

StringRequest strReq = new StringRequest(Request.Method.POST 

相反POST,它應該得到什麼?

+0

爲什麼GET?我正在使用POST獲得正確的響應... –

+0

您是否找到了解決方案? –

+0

是的..我已經發布了它... –

0

使適配器類中的消息變量爲靜態。

+0

請問哪個變量? –

+0

private final JSONArray messages;這個在ChatMessageGroups中。 –

+0

現在嘗試..它不工作.. –

0

做不同的東西:

初始化RecyclerViewAdapterLayoutManager等在onCreateView身體。

充分利用RecyclerView並以這種方式,你將能夠從聽者不是最終沒有關於它的警告參考適配器適配器的成員變量...

當您創建適配器傳遞一個空JSONArray

所以所有的初始化調用手勢在onCrateView()完成。

第二個加法,一個方法

public void changeMessages(JSONArray messages){ 
    this.messages = messages; 
    this.notifyDataSetChanged(); 
} 

您adapeter。

最後在VolleyResponse.Listener,通過調用上述方法與新的JSONArray接收數據並替換適配器中的JSONArray