2017-06-13 15 views
1

您好我在cardviews中有一個recyclerview,我從服務器(JSONobjects)中抽取數據並提供一個抽籤請求。我如何檢測我的recyclerview是否爲空?我試圖檢查ArrayList是否爲空,但似乎不起作用,我該如何解決?由於如何檢查Recyclerviews是空的

這裏是我的片段:

public class Tab1History extends Fragment implements SwipeRefreshLayout.OnRefreshListener 
{ 

SwipeRefreshLayout mSwipeRefreshLayout; 
private RecyclerView recyclerView; 
private CespiteAdapter adapter; 
UserSessionManager session; 
ConnectionDetector cd; 

private static final String URL_DATA = "http://myfile.php"; 

private List<CespiteOgg> cespiteOggList; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) 
{ 
    cd = new ConnectionDetector(getActivity()); 
    View rootView = inflater.inflate(R.layout.tab1history, container, false); 

    recyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); 
    recyclerView.setHasFixedSize(true);//every item of the RecyclerView has a fix size 
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 

    cespiteOggList = new ArrayList<>(); 

    // SwipeRefreshLayout 
    mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_container); 
    mSwipeRefreshLayout.setOnRefreshListener(this); 
    mSwipeRefreshLayout.setColorSchemeResources(
      R.color.colorAccent 
      ); 

    /** 
    * Showing Swipe Refresh animation on activity create 
    * As animation won't start on onCreate, post runnable is used 
    */ 
    mSwipeRefreshLayout.post(new Runnable() { 

     @Override 
     public void run() { 

      mSwipeRefreshLayout.setRefreshing(true); 

      // Fetching data from server 
      loadRecyclerViewData(); 
     } 
    }); 

    return rootView; 
} 
/** 
* This method is called when swipe refresh is pulled down 
*/ 
@Override 
public void onRefresh() 
{ 
    if(cd.isNetworkAvailable()) 
    { 
     // Fetching data from server 
     loadRecyclerViewData(); 
    } 
    else 
    { 
     Toast.makeText(getActivity(), "Nessuna connessione ad internet!", Toast.LENGTH_SHORT).show(); 
     mSwipeRefreshLayout.setRefreshing(false); 
    } 

} 

private void loadRecyclerViewData() 
{ 

    cespiteOggList.clear(); 
    //cespiteOggList = new ArrayList<>(); 
    // Showing refresh animation before making http call 
    mSwipeRefreshLayout.setRefreshing(true); 

    // Session class instance 
    session = new UserSessionManager(getActivity()); 
    //get user data from session 
    HashMap<String, String> user = session.getUserDetails(); 
    //get name 
    String name = user.get(UserSessionManager.KEY_NAME); 
    // get username 
    final String usernameUtente = user.get(UserSessionManager.KEY_USERNAME); 


    StringRequest stringRequest = new StringRequest(Request.Method.POST, 
      URL_DATA, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String s) { 

        try { 
         JSONObject jsonObject = new JSONObject(s); 
         JSONArray array = jsonObject.getJSONArray("dates"); 

         for(int i=0; i<array.length(); i++) 
         { 
          JSONObject o = array.getJSONObject(i); 
          CespiteOgg item = new CespiteOgg(
            o.getString("CodNumInventario"), 
            o.getString("Nome"), 
            o.getString("DtCatalogazione"), 
            o.getString("CodIdA"), 
            o.getString("username") 
          ); 
          cespiteOggList.add(item); 
         } 

         adapter = new CespiteAdapter(cespiteOggList, getActivity()); 
         recyclerView.setAdapter(adapter); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

        // Stopping swipe refresh 
        mSwipeRefreshLayout.setRefreshing(false); 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

        // Stopping swipe refresh 
        mSwipeRefreshLayout.setRefreshing(false); 

       } 
      }) 
    { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Username", usernameUtente); 
      return params; 
     } 
    }; 

    RegisterRequest.getmInstance(getActivity()).addToRequestque(stringRequest); 


} 


} 

而且它的適配器:

public class CespiteAdapter extends RecyclerView.Adapter<CespiteAdapter.ViewHolder> 
{ 


private List<CespiteOgg> cespiteOggList; 
private Context context; 

public CespiteAdapter(List<CespiteOgg> cespiteOggList, Context context) { 

    this.cespiteOggList = cespiteOggList; 
    this.context = context; 
} 

public class ViewHolder extends RecyclerView.ViewHolder 
{ 

    public CardView cv; 
    public TextView txtNumInventario; 
    public TextView txtNomeCespite; 
    public TextView txtDtCatalogazione; 
    public TextView txtAula; 
    public TextView txtNomeUser; 


    ViewHolder(View itemView) 
    { 

     super (itemView); 
     //cv = (CardView) itemView.findViewById(R.id.cardView); 
     txtNumInventario = (TextView) itemView.findViewById(R.id.txtNumeroInventario); 
     txtNomeCespite = (TextView) itemView.findViewById(R.id.txtNomeCespite); 
     txtDtCatalogazione = (TextView) itemView.findViewById(R.id.txtDataCatalogazione); 
     txtAula = (TextView) itemView.findViewById(R.id.txtAula); 
     txtNomeUser= (TextView) itemView.findViewById(R.id.txtNomeUser); 


    } 
} 
+0

如果你是從獲取服務器的數據,然後insted的檢查回收視圖中的項目大小,如果(array.length> 0,您可以檢查你的數據的大小是由凌空到來, ){//意味着你有數據,所以回收視圖不是空的} – dharmx

回答

1

您可以覆蓋適配器getItemCount(getItemCount())返回列表的大小和你的RecyclerView獲取適配器( getAdapter())。

1

這部分添加到您的適配器:

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

,你可以得到recyclerView的大小:

adapter.getItemCount() 
+0

對我來說簡單的recyclerView.childCount工程 –

0

也許你需要重寫onCreateViewHolderonBindViewHoldergetItemCount。值getItemCount返回等於RecyclerView項目的計數。

0

您可以使用getitemcount

if (adapter.getItemCount() == 0) 
{ 
    Toast.makeText(getApplicationContext(), "NO Data Found",Toast.LENGTH_SHORT).show(); 
}