Reputation: 2959
I am trying to add the swipe refresh programmatically but it doesn't work. No action on pull to refresh. Anything wrong here?
ListView listView = (ListView) findViewById(R.id.listView);
List<String> values = new ArrayList<>();
values.add("Hello");
values.add("hi");
values.add("Hello");
values.add("hi");
values.add("Hello");
values.add("hi");
values.add("Hello");
values.add("hi");
values.add("Hello");
values.add("hi");
values.add("Hello");
values.add("hi");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
listView.setAdapter(adapter);
SwipeRefreshLayout swipeRefreshLayout = new SwipeRefreshLayout(this);
SwipeRefreshLayout.LayoutParams swipeRefreshLayoutParams = new SwipeRefreshLayout.LayoutParams(SwipeRefreshLayout.LayoutParams.MATCH_PARENT, SwipeRefreshLayout.LayoutParams.WRAP_CONTENT);
swipeRefreshLayout.setLayoutParams(swipeRefreshLayoutParams);
swipeRefreshLayout.setBackgroundColor(Color.RED);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.d(TAG, "Pulled");
}
});
ViewGroup r = (ViewGroup) listView.getParent();
r.addView(swipeRefreshLayout);
Upvotes: 0
Views: 1838
Reputation: 43
The current hierarchy of the views is:
ParentLayout --> ListView.
But what we want is:
ParentLayout --> SwipeToRefresh --> ListView.
This is because a view cannot have 2 parents.
Hence,
final SwipeRefreshLayout swipeLayout = new SwipeRefreshLayout(context);
((ViewGroup) listView.getParent()).addView(swipeLayout);
((ViewGroup) listView.getParent()).removeView(listView);
swipeLayout.addView(listView);
Be sure to attach onRefresh listener to the swipeRefresh layout.
Upvotes: 2