I am using SwipeRefreshLayout for my recyclerview.I am showing data in recyclerview by making an api call and i am calling that api on swipe refresh.The issue I am having is that if list size is zero than swipe refresh is not working.I want to make api call on swipe refresh even when list size is zero so that list gets updated if any new data is there.
<?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.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/datalist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/homebackground"
android:clipToPadding="false"
android:paddingBottom="8dp"
/>
</android.support.v4.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/tvNoData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No orders yet"
android:textSize="20sp"
android:visibility="gone" />
</RelativeLayout>
Code
swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
callLoginApi();
}
});
private void callLoginApi() {
APICALL(in, new Callback<Orssaf>() {
@Override
public void success(Result<Orssaf> result) {
swiperefresh.setRefreshing(false);
}
}
@Override
public void failure(TwitterException e) {
swiperefresh.setRefreshing(false);
}
});
}
Adapter
public class OrderHistoryAdapter extends RecyclerView.Adapter<OrderHistoryAdapter.MyViewHolder> {
private Context mContext;
private ArrayList<OrderDetailsData> orders;
public OrderHistoryAdapter(Context context, ArrayList<OrderDetailsData> order) {
mContext = context;
orders = order;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_foodvitecurrentorder, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
OrderDetailsData order = orders.get(position);
Picasso.with(mContext).load(order.getSenderImage()).placeholder(R.drawable.profile_img).transform(new CircleTransform()).into(holder.profileimage);
holder.itemscount.setText("dfg"));
holder.pricecount.setText("$fsdf"));
holder.ordertime.setText("sdgsdg");
holder.message.setText("greg");
}
}
@Override
public int getItemCount() {
return orders.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private CircularImageView profileimage;
private TextView status, message, itemscount, pricecount, ordertime
public MyViewHolder(View itemView) {
super(itemView);
profileimage = (CircularImageView) itemView.findViewById(R.id.profileimage);
status = (TextView) itemView.findViewById(R.id.status);
message = (TextView) itemView.findViewById(R.id.message);
itemscount = (TextView) itemView.findViewById(R.id.itemscount);
pricecount = (TextView) itemView.findViewById(R.id.pricecount);
ordertime = (TextView) itemView.findViewById(R.id.ordertime);
}
}
}
UPDATED according to answer..
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.foodviteseller.co.foodviteseller.views.RecyclerViewEmptySupport
android:id="@+id/datalist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/homebackground"
android:clipToPadding="false"
android:paddingBottom="8dp"
/>
<TextView
android:id="@+id/emptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:text="EmptyList"
android:textSize="20sp"
android:visibility="gone" />
<!--<include layout="@layout/no_data_layout" />-->
</android.support.v4.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/tvNoData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No orders yet"
android:textSize="20sp"
android:visibility="gone" />
</RelativeLayout>
Code
datalist = (RecyclerViewEmptySupport) v.findViewById(R.id.datalist);
private void callLoginApi() {
APICALL(in, new Callback<Orssaf>() {
@Override
public void success(Result<Orssaf> result) {
swiperefresh.setRefreshing(false);
if (orders.size() > 0) {
orderAdapter = new OrderHistoryAdapter(mContext, orders);
datalist.setAdapter(orderAdapter);
} else {
emptyView.setVisibility(View.VISIBLE);
datalist.setEmptyView(emptyView);
tvNoData.setVisibility(View.VISIBLE);
tvNoData.setText("No orders yet");
}
}
}
@Override
public void failure(TwitterException e) {
swiperefresh.setRefreshing(false);
}
});
}