[英]RecyclerView data empty to display textview in fragment
My json data is empty to visible the textview and hide the recyclerview. 我的json数据为空,可见textview并隐藏recyclerview。
My xml code recyclerview and textview: 我的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"
/>
My java code show textview & hide recyclerview here: 我的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();}
It's possible to any one help me.I am new in android code. 任何人都可以帮助我。我是Android代码的新手。
In your XML, you have set the visibility of your TextView
"pendingnullorder"
to "gone"
and in the onCreateView
method, you have also set the visibility of your RecyclerView
"pending"
to View.GONE
. 在XML中,您已将
TextView
"pendingnullorder"
的可见性设置为"gone"
并且在onCreateView
方法中,您还将RecyclerView
"pending"
View.GONE
"pending"
的可见性设置为View.GONE
。 It seems you see none of your views. 你似乎没有看到任何观点。
In your method getProgressData
(or getPendingData
) you should change the visibility of one of this view depending on the size of your adapter (if no element: pendingnullorder.setVisibility(View.VISIBLE);
, otherwise: recyclerView.setVisibility(View.VISIBLE);
), and update visibilities on the onResponse
method. 在您的方法
getProgressData
(或getPendingData
)中,您应该根据适配器的大小更改此视图之一的可见性(如果没有元素: pendingnullorder.setVisibility(View.VISIBLE);
否则: recyclerView.setVisibility(View.VISIBLE);
),并更新onResponse
方法的可见性。
[EDIT] [编辑]
Here is an example of what you can do: 以下是您可以执行的操作的示例:
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);
}
}
Second we can optimize the way to show the data for RecycleView. 其次,我们可以优化显示RecycleView数据的方式。 Remove
去掉
adapter = new OrderListAdapter(orderLists, getActivity());
recyclerView.setAdapter(adapter);
in the onCreateView
method. 在
onCreateView
方法中。 In progressOrderProgress
method, please do as below 在
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();
}
Hope it will resolve your issue 希望它能解决您的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.