This article demonstrates some of the other features of RadListView: how to show empty content when the list is empty, how to add header and footer, how to listen to item clicks and how to scroll to a specific position in the list.
You can easily provide an indication that your list currently has no items. This can be due to the lack of adapter or if the adapter has no items.
This can be done through the setEmptyContent(View) method. You can combine multiple items - images, texts, etc. in a layout of your choice and use it as a parameter for this method. Here's one example where we have create a dedicated layout resource file to define our empty content:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_gravity="center"
android:layout_width="100dp"
android:layout_height="100dp">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text="nothing here"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</FrameLayout>
This sample demonstrates how to show the currently default launcher icon. Make sure you are referencing an existing image file from its proper location (mipmap, drawable, etc.) and with its exact name (ic_launcher, Icon, etc.).
Then we need to inflate this layout and set the resulted view as empty content:
LayoutInflater inflater = LayoutInflater.from(this);
View emptyContentView = inflater.inflate(R.layout.empty_content, listView, false);
listView.setEmptyContent(emptyContentView);
LayoutInflater inflater = LayoutInflater.From (this);
View emptyContentView = inflater.Inflate (Resource.Layout.empty_content, listView, false);
listView.EmptyContent = emptyContentView;
Now if our list view doesn't contain an adapter or if it has no items, it would look in a way similar to this:
If all you need to display is a simple TextView, you can take advantage of our default empty content. Here's how:
listView.setEmptyContentEnabled(true);
listView.EmptyContentEnabled = true;
This will automatically create a TextView with a default text that will be set as your empty content view. You can access if you need to change its appearance, text and or gravity through the getEmptyContent() method, of course after you have enabled it as just shown (setEmptyContentEnabled(true)).
RadListView allows you to add a custom view as a header or as a footer to your list. The header will be displayed on top of the list and the footer will be at the bottom. Here's how to add a header:
TextView headerView = new TextView(this);
headerView.setText("CITIES");
listView.setHeaderView(headerView);
TextView headerView = new TextView(this);
headerView.Text = "CITIES";
listView.HeaderView = headerView;
The footer can be added in a similar way with the setFooterView(View) method. You can get the current header any time by the getHeaderView() method and getFooterView() will give you the footer so that you can modify it if necessary.
Often you will need to listen for item clicks in order to provide more information for the clicked item, for example for a master-detail scenario. Here's one simple example that demonstrates how to add a toast with the content of the clicked item:
RadListView.ItemClickListener itemClickListener = new RadListView.ItemClickListener() {
@Override
public void onItemClick(int position, MotionEvent motionEvent) {
Toast.makeText(listView.getContext(), cityAdapter.getItem(position).toString(),
Toast.LENGTH_SHORT).show();
}
@Override
public void onItemLongClick(int position, MotionEvent motionEvent) {
}
};
public class CityClickListener : Java.Lang.Object, RadListView.IItemClickListener {
private Context context;
private ListViewAdapter listViewAdapter;
public CityClickListener(Context context, ListViewAdapter adapter) {
this.context = context;
this.listViewAdapter = adapter;
}
public void OnItemClick (int postion, MotionEvent motionEvent)
{
Toast.MakeText (context, listViewAdapter.GetItem (postion).ToString(),
ToastLength.Short).Show ();
}
public void OnItemLongClick (int postion, MotionEvent motionEvent)
{
}
}
And now let's add it to our list view:
listView.addItemClickListener(itemClickListener);
CityClickListener cityClickListener = new CityClickListener (this, cityAdapter);
listView.AddItemClickListener (cityClickListener);
You can use the same listener in a similar way to get notified for long clicks by using the listener's onItemLongClick(). You can remove the listener by calling removeItemClickListener(ItemClickListener) on the list view.
If you need to scroll the list to a specific position or to the start of the list or to its end, you can use RadListView's scrollToPosition(int), scrollToStart() or scrollToEnd() methods.