繁体   English   中英

RecyclerView数据为空以在片段中显示textview

[英]RecyclerView data empty to display textview in fragment

我的json数据为空,可见textview并隐藏recyclerview。
我的xml代码recyclerview和textview:

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



我的java代码在这里显示textview&hide 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();}

任何人都可以帮助我。我是Android代码的新手。

在XML中,您已将TextView "pendingnullorder"的可见性设置为"gone"并且在onCreateView方法中,您还将RecyclerView "pending" View.GONE "pending"的可见性设置为View.GONE 你似乎没有看到任何观点。

在您的方法getProgressData (或getPendingData )中,您应该根据适配器的大小更改此视图之一的可见性(如果没有元素: pendingnullorder.setVisibility(View.VISIBLE);否则: recyclerView.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);
    }
}
  1. 首先,您需要检查数据是否为空。
  2. 其次,我们可以优化显示RecycleView数据的方式。 去掉

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

onCreateView方法中。 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();
   }

希望它能解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM