2017-07-26 34 views
-1

已更新:回收视图不会消失

我想显示“列表中没有项目”时,实际上没有任何内容显示在碎片的回收站中。这就是我想:

在我的片段

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#f0f0f0" 
android:animateLayoutChanges="true"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/assigned_recycler" 
    android:scrollbars="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingTop="50dp" 
    android:background="#f0f0f0" 
    android:animationCache="true" 
    android:animateLayoutChanges="false" /> 

<TextView 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:visibility="gone" 
    android:text="@string/no_data_available" /> 

在我的片段的Java文件

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity_assigned_orders, container, false); 


    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.assigned_recycler); 


    mRecyclerView.setHasFixedSize(true); 




    mLayoutManager = new LinearLayoutManager(this.getContext()); 
    mRecyclerView.setLayoutManager(mLayoutManager); 


    mAdapter = new AssignedOrdersListAdapter(orderService.getAssignedOrders()); 
    mAdapter.setManager(getFragmentManager()); 
    mRecyclerView.setAdapter(mAdapter); 
    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
    toolbar.setTitle("Assigned"); 

    emptyViewText = (TextView)rootView.findViewById(R.id.empty_view); 


    new LegDistanceTask().execute(""); 
    return rootView; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    getActivity().registerReceiver(receiver, new IntentFilter("OrderUpdate")); 

    int count = mAdapter.getItemCount(); 
    if(count==0){ 

     mRecyclerView.setVisibility(View.GONE); 
     emptyViewText.setVisibility(View.VISIBLE); 
    } 
} 

我失去了一些东西在这里?

它也必须做我的布局代码和颜色?

+0

理想情况下,您不应该在onViewCreated中执行此操作,因为您的recyclerview状态可能会根据您如何获取数据而经常更改。所以你应该在获得数据后再做。如果它的服务调用然后在后台执行异步任务。再加上您是否也为回收视图查找了viewviewid?它不在代码 –

+0

嗨Kapsym,我应该把它放在哪里?在调用onViewCreatred之前,我已验证计数确实返回0,服务调用成功完成。我也试过把它放在片段的Resume上。 – Ackman

+0

检查您是否正在更改代码中其他位置的可见性。我只是试了一下,似乎工作正常 –

回答

2

请尝试下面的代码在onCreateView

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity_assigned_orders, container, false); 

     mRecyclerView = (RecyclerView) rootView.findViewById(R.id.assigned_recycler); 

     mRecyclerView.setHasFixedSize(true); 

     mLayoutManager = new LinearLayoutManager(this.getContext()); 
     mRecyclerView.setLayoutManager(mLayoutManager); 


     Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
     toolbar.setTitle("Assigned"); 
     emptyViewText = (TextView)rootView.findViewById(R.id.empty_view); 

     if(orderService.getAssignedOrders().size() != 0) { 
      mRecyclerView.setVisibility(View.VISIBLE); 
      emptyViewText.setVisibility(View.GONE); 
      mAdapter = new AssignedOrdersListAdapter(orderService.getAssignedOrders()); 
      mAdapter.setManager(getFragmentManager()); 
      mRecyclerView.setAdapter(mAdapter); 
     } else { 
      mRecyclerView.setVisibility(View.GONE); 
      emptyViewText.setVisibility(View.VISIBLE); 
     } 

     new LegDistanceTask().execute(""); 
     return rootView; 
    } 

上面的代码将检查是否从服务接收到的列表为空或不并相应地显示组件。

您应该检查列表大小来确定,而不是适配器计数。

+0

是的。这工作。一定是我使用getItemCount()逻辑的方式。或条件陈述。 – Ackman

+0

快乐编码.. :) – codeWorm

+0

非常感谢您的帮助:) – Ackman