2016-07-04 3 views
1

json 데이터가 비어있어 textview가 보이고 recyclerview가 숨겨집니다.
내 XML 코드 recyclerview 및 텍스트 뷰 :
RecyclerView 데이터가 비어있어 조각에 텍스트 뷰를 표시합니다.

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

<android.support.v7.widget.RecyclerView 
    android:id="@+id/pending" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="vertical" 
    /> 
<TextView 
    android:id="@+id/pendingnullorder" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Current no orders available" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:textSize="@dimen/order_list_view_font_size" 
    android:visibility="gone" 
    /> 



여기 내 자바 코드 쇼 텍스트 뷰 & 숨기기 recyclerview는 :

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View drawer = inflater.inflate(R.layout.fragment_pending, container, false); 

    pendingnullorder = (TextView) drawer.findViewById(R.id.pendingnullorder); 

    recyclerView = (RecyclerView) drawer.findViewById(R.id.pending); 
    progressBar = (ProgressBar) drawer.findViewById(R.id.progressBar); 
    recyclerView.setVisibility(View.GONE); 
    progressBar.setVisibility(ProgressBar.VISIBLE); 

    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    orderLists = new ArrayList<>(); 

    getProgressData(); 

    adapter = new OrderListAdapter(orderLists, getActivity()); 
    recyclerView.setAdapter(adapter); 

    return recyclerView; 
} 
private void getProgressData(){ 
String token = SharedPreferencesManager.readPreferenceString("token", "D/N"); 
JSONObject progressData = new JSONObject(); 
try{ 
    progressData.put("token", token); 
    JsonObjectRequest progressObject = new JsonObjectRequest(1, Common.OrderDetails + "progress", progressData, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject progressResponse) { 
      Log.d("Responseprogress", progressResponse.toString()); 
      try { 
       int status = progressResponse.getInt("status"); 
       if(status == 1) { 
        progressOrderProgress(progressResponse); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
      Log.d("Response", "PROGRESS ERROR"); 
     } 
    }); 
    progressObject.setShouldCache(false); 
    ServiceBellApp.getInstance().addToRequestQueue(progressObject); 
} 
catch (JSONException localJSONException){ 
    localJSONException.printStackTrace(); 
    return; 
}}private void progressOrderProgress(JSONObject progressResponse) throws JSONException { 
JSONArray result = progressResponse.getJSONArray("orderdata"); 
for(int i=0; i<result.length(); i++){ 
    OrderList orderListModule = new OrderList(); 
    JSONObject orderData = null; 
    try { 
     orderData = result.getJSONObject(i); 
     orderListModule.setPackage_name(orderData.getString("name")); 
     orderListModule.setOrderdate(orderData.getString("date")); 
     orderListModule.setServicedate(orderData.getString("service")); 
     orderListModule.setServicetime(orderData.getString("time")); 
     orderListModule.setOrderid(orderData.getString("id")); 
     orderListModule.setOrdstatus(orderData.getString("status")); 
     orderListModule.setOrderamount(orderData.getInt("ramount")); 
    }catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    orderLists.add(orderListModule); 
} 
swipeRefreshLayout.setRefreshing(false); 
adapter.notifyDataSetChanged();} 

그것은 가능성이 어느 한 줘요 새로운 오전 도움 안드로이드 코드.

+0

당신이 여기 JSON 응답을 넣을 수 있습니다! 을 추가하여 orderLists –

+0

또한 내가 당신의 재생 – Pavya

+0

pendingOrderProgress 방법을 추가 메서드에서 'updateUI()'를 호출하고 onCreateView 및 progressOrderProgress 메서드에서이 코드를 두 번 호출합니다. – vinoth12594

답변

2

를 해결할 희망 아래 제발, 당신은 "gone"TextView"pendingnullorder"의 가시성을 설정하고 onCreateView 방법, 당신은 또한 설정 RecyclerView"pending" ~ View.GONE의 공개 여부 당신의 견해가 전혀 보이지 않는 것 같습니다. 당신의 방법 getProgressData (또는 getPendingData)이 어댑터의 크기에 따라이보기 중 하나의 가시성을 변경해야합니다에서

(NO 요소의 경우 : recyclerView.setVisibility(View.VISIBLE); : 그렇지 pendingnullorder.setVisibility(View.VISIBLE); 등) onResponse 방법에 및 업데이트 가시성.

[편집] 여기

당신이 할 수있는 일의 예입니다

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View drawer = inflater.inflate(R.layout.fragment_pending, container, false); 

    pendingnullorder = (TextView) drawer.findViewById(R.id.pendingnullorder); 

    recyclerView = (RecyclerView) drawer.findViewById(R.id.pending); 
    progressBar = (ProgressBar) drawer.findViewById(R.id.progressBar); 
    /*recyclerView.setVisibility(View.GONE);*/ 
    progressBar.setVisibility(ProgressBar.VISIBLE); 

    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(inflater.getContext())); 

    orderLists = new ArrayList<>(); 

    getPendingData(); 

    adapter = new OrderListAdapter(orderLists, inflater.getContext()); 
    recyclerView.setAdapter(adapter); 

    updateUI(); 

    return drawer; 
} 

private void getPendingData() { 
    String token = SharedPreferencesManager.readPreferenceString("token", "D/N"); 
    JSONObject progressData = new JSONObject(); 
    try{ 
     progressData.put("token", token); 
     JsonObjectRequest progressObject = new JsonObjectRequest(1, Common.OrderDetails + "progress", progressData, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject progressResponse) { 
       Log.d("Responseprogress", progressResponse.toString()); 
       try { 
        int status = progressResponse.getInt("status"); 
        if(status == 1) { 
         progressOrderProgress(progressResponse); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       error.printStackTrace(); 
       Log.d("Response", "PROGRESS ERROR"); 
      } 
     }); 
     progressObject.setShouldCache(false); 
     ServiceBellApp.getInstance().addToRequestQueue(progressObject); 
    } 
    catch (JSONException localJSONException){ 
     localJSONException.printStackTrace(); 
     return; 
    } 
} 

private void progressOrderProgress(JSONObject progressResponse) throws JSONException { 
    JSONArray result = progressResponse.getJSONArray("orderdata"); 
    for(int i=0; i<result.length(); i++){ 
     OrderList orderListModule = new OrderList(); 
     JSONObject orderData = null; 
     try { 
      orderData = result.getJSONObject(i); 
      orderListModule.setPackage_name(orderData.getString("name")); 
      orderListModule.setOrderdate(orderData.getString("date")); 
      orderListModule.setServicedate(orderData.getString("service")); 
      orderListModule.setServicetime(orderData.getString("time")); 
      orderListModule.setOrderid(orderData.getString("id")); 
      orderListModule.setOrdstatus(orderData.getString("status")); 
      orderListModule.setOrderamount(orderData.getInt("ramount")); 
     }catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     orderLists.add(orderListModule); 
    } 
    swipeRefreshLayout.setRefreshing(false); 
    adapter.notifyDataSetChanged(); 
    updateUI(); 
} 

private void updateUI() { 
    if (adapter.getCount() == 0) { 
     pendingnullorder.setVisibility(View.VISIBLE); 
     recyclerView.setVisibility(View.GONE); 
    } else { 
     pendingnullorder.setVisibility(View.GONE); 
     recyclerView.setVisibility(View.VISIBLE); 
    } 
} 
+0

내 대답을 업데이트 한 예를 – vinoth12594

+0

에 대한 코딩을주십시오을에 얼마나 많은 항목 : – Donkey

+0

updateUI() 함수가 호출하지 않는 업데이트 된 코드를 시도했습니다. updateUI() 함수에서 log.d를 설정했지만 로그가 표시되지 않습니다. – vinoth12594

1
  1. 먼저 데이터가 비어 있지 않은지 확인해야합니다.
  2. 두 번째로 RecycleView에 대한 데이터를 표시하는 방법을 최적화 할 수 있습니다. onCreateView 방법에

    adapter = new OrderListAdapter(orderLists, getActivity()); recyclerView.setAdapter(adapter);

를 제거 . progressOrderProgress 방법,

if(adapter==null){ 
     adapter = new OrderListAdapter(orderLists, getActivity()); 
     recyclerView.setAdapter(adapter); 
    } else { 
     adapter.updateData(orderLists); // please define this method in your adapter 
     adapter.notifyDataSetChanged(); 
    } 

이 당신의 XML에서 문제

+0

이 작동하지 않는 – vinoth12594

+0

@vinothkumar을 기다리고 –

관련 문제